HTTP/HTTPS Fehler in einer Proxy/Docker/LXC Umgebung.
-
Hallo zusammen,
ich bin dabei, eine neue WordPress Site zu erstellen und habe bei meinem Setup einige Herausforderungen. Insbesondere geht es um den internen loopback-Verkehr und die REST API. Die Website scheint auch problemlos zu laufen, ich habe keinerlei Fehler mit dem Caching oder XSS-Warnungen. Die generierten Links erhalten auch https:// in der URI.Zunächst zu meiner Infrastruktur:
Auf einen meiner Server läuft die Virtualisierungsumgebung Proxmox, welche auf QEMU basiert. Darauf laufen mehre LXC-Container. Einer davon ist ein NGINX Proxy Manager. Dieser Container ist der einzige in meinem konstrukt, welcher eine externe IP-Adresse besitzt. Alle anderen Container kommunizieren intern über ein 192.168.0.0/16 Netz. Vor dem NGINX-PM ist Cloudflare vorgeschaltet.WordPress lasse ich in einem Container laufen, wo ein Docker-Server die Dienste bereitstellt. Innerhalb des Docker-Server nutze ich anschließend das folgende docker-compose.yml file, um WordPress zu starten:
services:
db:
image: mariadb
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- ./data/mariadb:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD={password}
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD={password}
expose:
- 3306
web:
image: wordpress
depends_on:
- db
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD={password}
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_DEBUG=0
- WORDPRESS_CONFIG_EXTRA=define('WP_CONTENT_DIR', '/var/www/html/wp-content'); define('WP_CONTENT_URL', 'https://static.forensicshark.com'); define('COOKIE_DOMAIN', 'www.forensicshark.com'); define('SITECOOKIEPATH', '.'); define('WP_HOME', 'http://www.forensicshark.com'); define('WP_SITEURL', 'http://www.forensicshark.com');
volumes:
- ./data/wordpress:/var/www/html
- ./data/wordpress-static:/var/www/html/wp-content
- ./config/apache2/sites-enabled:/etc/apache2/sites-enabled
- ./config/apache2/conf-enabled/server-name.conf:/etc/apache2/conf-enabled/server-name.conf
- ./config/php/custom.ini:/usr/local/etc/php/conf.d/config.ini
- ./log/apache2:/var/log/apache2
extra_hosts:
- www.forensicshark.com:127.0.0.1Apache2 läuft innerhalb des Docker-Containers natürlich auf HTTP, denn das Zertifikat kommt von Cloudflare und wird erst auf meinem NGINX-PM eingesetzt. Mein Problem ist nun, dass der loopback-Traffic von WordPress auf HTTPS versucht wird, was natürlich nicht geht:
The loopback request to your site failed, this means features relying on them are not currently working as expected.
Error: cURL error 7: Failed to connect to www.forensicshark.com port 443 after 0 ms: Couldn't connect to server (http_request_failed)In dem WordPress Docker Image ist jedoch die wp-config.php bereits angepasst, da erwartet wird, dieses in einem reverse proxy setup zu betreiben. Die entsprechenden Header fügt der Proxy auch hinzu:
// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}
// (we include this by default because reverse proxying is extremely common in container environments)real_ip_header CF-Connecting-IP;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;Hier ist mein Netflow-Diagram:
Besucher > https://www.forensicshark.com > Cloudflare CDN > https://my.real.server.ip:443 > ProxyManager > http://192.168.1.1:80 > WordPress LXC > http://172.18.0.3:80 > Docker Container (Apache2)
Ich habe sowohl $WP_HOME als auch $WP_SITEURL mit https:// und nur mit http:// ausprobiert. Auch ohne die Konfiguration ohne diese in dem docker-compose File anzugeben, führen nicht zum gewünschten Ziel.
Hier ist meine Apache VirtualHost Configuration. Ganz basic, ohne große veränderungen zur empfohlenen Konfiguration, mit ausnahme dem log-format:
<VirtualHost *:80>
ServerName www.forensicshark.com
ServerAdmin webmaster@forensicshark.com
DocumentRoot /var/www/html
LogFormat "%v:%p %a %{c}a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" proxy_combined
LogFormat "%v %{CF_CONNECTING_IP}i (via cloudflare:%h) %l %u %t \"%r\" %>s %b" cloudflare
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log cloudflare
</VirtualHost>Das rederict von HTTP auf HTTPS läuft über den Proxy Manager, so dass innerhalb des WordPress Docker Container nur der Port 80 für HTTP geöffnet sein muss.
In der server-name.conf von Apache2 ist auch die Domain eingetragen:
ServerName www.forensicshark.com
Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]
- Du musst angemeldet sein, um auf dieses Thema zu antworten.