私は、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
以下は私の Apache 設定ファイルです:
/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>
: := 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 証明書の設定でこの問題が発生したことはありませんが、これまでリバース プロキシを使用したことはありません。問題は、Apache で HTTP/HTTPS が誤って構成されていることにあるのではないかと思います。
答え1
wp-config.php の一番上 (<?php の後) に以下を追加することで修正されました。
if ( (!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) { $_SERVER['HTTPS'] = 'on'; }