WordPress Docker 컨테이너에 연결되는 특정 포트(8001)에 Apache 역방향 프록시를 설정하려고 합니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9592d33ed6c1 wordpress:5.5.0-php7.3-apache "docker-entrypoint..." 23 seconds ago Up 21 seconds 0.0.0.0:8001->80/tcp martynbiz_wordpress_1
7c0d046560d6 mysql:5.7 "docker-entrypoint..." 25 seconds ago Up 23 seconds 3306/tcp, 33060/tcp martynbiz_db_1
다음은 내 아파치 구성 파일입니다.
/etc/apache2/sites-available/martynbiz.conf
<Virtualhost *:80>
ServerName www.martyn.biz
ServerAlias martyn.biz
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
<Proxy http://localhost:8001/*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8001/ nocanon
ProxyPassReverse / http://localhost:8001/
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =martyn.biz
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.martyn.biz [OR]
RewriteCond %{SERVER_NAME} =martyn.biz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</Virtualhost>
/etc/apache2/sites-available/martynbiz-le-ssl.conf
<IfModule mod_ssl.c>
<Virtualhost *:443>
ServerName www.martyn.biz
ServerAlias martyn.biz
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
<Proxy http://localhost:8001/*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8001/ nocanon
ProxyPassReverse / http://localhost:8001/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/martyn.biz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/martyn.biz/privkey.pem
</Virtualhost>
</IfModule>
내 인증서가 유효한 것 같고 역방향 프록시가 컨테이너를 도메인 이름과 연결하고 있습니다. 그러나 혼합 콘텐츠가 차단되어 스타일시트 등이 표시되지 않습니다. 구성 파일에서 모든 SSL 항목을 제거하고 대신 HTTP를 사용하면 모든 것이 괜찮아 보입니다. SSL 인증서를 설정할 때 이전에는 이 문제가 발생하지 않았지만 과거에는 역방향 프록시를 사용하지 않았습니다. 문제가 해당 문제이고 HTTP/HTTPS가 아파치에서 잘못 구성된 것 같습니다.
답변1
wp-config.php의 맨 위( <?php 뒤)에 다음을 추가하여 수정했습니다.
if ( (!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) { $_SERVER['HTTPS'] = 'on'; }