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
'리눅스 > Containers & Kubernetes' 카테고리의 다른 글
6. Docker PHPMyAdmin 설치 (0) | 2022.12.23 |
---|---|
5. Docker 이미지 생성 (컨테이너 현재 상태 저장) (0) | 2022.12.22 |
4. Docker PHP 환경 설정 및 MySQL 연동, 기타 라이브러리 활성화 (0) | 2022.12.22 |
3. Docker MySQL 환경 설정 및 DB, 사용자 계정 생성 (0) | 2022.12.20 |
1. Ubuntu 22.04 에서 Docker 사용하기 (APM 기본 설치) (0) | 2022.12.14 |