2. Docker httpd 환경 설정하기 (PHP 연동, Virtualhost 및 SSL 적용)

반응형

2. Docker httpd 환경 설정하기 (PHP 연동, Virtualhost 및 SSL 적용)

 

1) httpd 기본 환경 설정 방법

httpd 컨테이너 내의 설정 파일 (conf) 를 호스트 서버로 복사하고 호스트 서버의 conf 디렉토리를 사용하도록 해야 합니다.

컨테이너가 구동중인 상태에서 아래와 같이 파일을 복사 합니다.

 

httpd 컨테이너의 /usr/local/apache2/conf 디렉토리를 /home/sysdocu/httpd/ 디렉토리 아래로 복사.

# docker cp httpd:/usr/local/apache2/conf/ /home/sysdocu/httpd/

 

호스트 서버에서 httpd 에 대한 conf 설정과 logs 확인이 가능하도록 docker-compose.yml 파일을 수정합니다.

그리고 아래 SSL 인증서 사용을 위해 호스트 서버와 컨테이너의 포트 (443) 도 연결 설정을 해줍니다.

# vi docker-compose.yml

...
    httpd:
        image: httpd:2.4.54
        container_name: httpd
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /home/sysdocu/httpd/html/:/usr/local/apache2/htdocs/
            - /home/sysdocu/httpd/conf/:/usr/local/apache2/conf/
            - /home/sysdocu/httpd/logs/:/usr/local/apache2/logs/
...

 

변경된 컨테이너를 적용합니다.

# docker compose stop httpd
# docker rm -v httpd
# docker compose up -d httpd

 

 

2) PHP 연동

 

PHP 연동에 필요한 httpd 모듈을 활성화 합니다.

# vi /home/sysdocu/httpd/conf/httpd.conf

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so    # 주석 해제
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so    # 주석 해제
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so    # 주석 해제
...
# 아래 확장자는 php 컨테이너로 포워딩 처리
ProxyPassMatch ^/(.*\.html(/.*)?)$ fcgi://php:9000/var/www/html/$1    # 추가
ProxyPassMatch ^/(.*\.htm(/.*)?)$ fcgi://php:9000/var/www/html/$1    # 추가
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
    # 추가

 

설정 적용을 위해 httpd 컨테이너를 재시작 합니다.

# docker compose restart httpd

 

3) virtualhost 설정

 

아래 파일에서 virtualhost 부분을 사용할 수 있도록 주석 제거하고 virtualhost 설정 파일을 수정합니다.

# vi /home/sysdocu/httpd/conf/httpd.conf

<Directory />
    AllowOverride none
    Require all granted    # 수정
</Directory>

Include conf/extra/httpd-vhosts.conf    # 주석 해제

 

# vi /home/sysdocu/httpd/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/home/sysdocu/httpd/html"
    ServerName sysdocu.tistory.com
    ErrorLog "logs/sysdocu.tistory.com-error_log"
    CustomLog "logs/sysdocu.tistory.com-access_log" common
</VirtualHost>

 

컨테이너 재시작 후 웹브라우저에서 잘 출력되는지 다시 확인해봅니다.

# docker compose restart httpd

 

('403 Forbidden' 에러가 출력될 경우)

/home/sysdocu 와 같이 홈 소스 디렉토리가 있는지 확인하고 접근 권한 (퍼미션 755) 을 확인해 봅니다.

 

4) SSL 발급 및 설정

 

준비된 SSL 인증서가 없으므로 Let's encrypt 에서 발급받아 사용해 봅니다.

https://sysdocu.tistory.com/1546

 

인증서 파일을 발급 받았으면 컨테이너에서 인증서 파일 인식이 가능하도록 복사해 줍니다.

# mkdir /home/sysdocu/httpd/conf/ssl
# cp -arp /etc/letsencrypt/archive/sysdocu.tistory.com /home/sysdocu/httpd/conf/ssl/

 

httpd 설정 파일을 아래와 같이 수정합니다.

# vi /home/sysdocu/httpd/conf/httpd.conf

LoadModule ssl_module modules/mod_ssl.so    # 주석 해제
Include conf/extra/httpd-ssl.conf    # 주석 해제

 

# vi /home/sysdocu/httpd/conf/extra/httpd-ssl.conf

#SSLSessionCache        "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"    # 주석 처리
#SSLSessionCacheTimeout  300    # 주석 처리

<VirtualHost *:443>
DocumentRoot /home/sysdocu/httpd/html
ServerName sysdocu.tistory.com:443
...
SSLEngine on
SSLCertificateFile conf/ssl/sysdocu.tistory.com/cert1.pem
SSLCertificateKeyFile conf/ssl/sysdocu.tistory.com/privkey1.pem
SSLCertificateChainFile conf/ssl/sysdocu.tistory.com/fullchain1.pem
</VirtualHost>

 

설정 적용을 위해 컨테이너를 재시작하면 웹브라우저에서 https 로 접근하여 인증서 확인이 가능합니다.

# docker compose restart httpd

 

반응형

댓글()