{"id":167258,"date":"2025-02-07T14:25:44","date_gmt":"2025-02-07T13:25:44","guid":{"rendered":"https:\/\/de.wordpress.org\/support\/?post_type=topic&#038;p=167258"},"modified":"2025-02-07T15:26:56","modified_gmt":"2025-02-07T14:26:56","slug":"http-https-fehler-in-einer-proxy-docker-lxc-umgebung","status":"publish","type":"topic","link":"https:\/\/de.wordpress.org\/support\/topic\/http-https-fehler-in-einer-proxy-docker-lxc-umgebung\/","title":{"rendered":"HTTP\/HTTPS Fehler in einer Proxy\/Docker\/LXC Umgebung."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hallo zusammen,<br \/>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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zun\u00e4chst zu meiner Infrastruktur:<br \/>Auf einen meiner Server l\u00e4uft 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 \u00fcber ein 192.168.0.0\/16 Netz. Vor dem NGINX-PM ist Cloudflare vorgeschaltet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress lasse ich in einem Container laufen, wo ein Docker-Server die Dienste bereitstellt. Innerhalb des Docker-Server nutze ich anschlie\u00dfend das folgende docker-compose.yml file, um WordPress zu starten:<br \/><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:<br \/>  db:<br \/>    image: mariadb<br \/>    command: '--default-authentication-plugin=mysql_native_password'<br \/>    volumes:<br \/>      - .\/data\/mariadb:\/var\/lib\/mysql<br \/>    restart: always<br \/>    environment:<br \/>      - MYSQL_ROOT_PASSWORD={password}<br \/>      - MYSQL_DATABASE=wordpress<br \/>      - MYSQL_USER=wordpress<br \/>      - MYSQL_PASSWORD={password}<br \/>    expose:<br \/>      - 3306<br \/>  web:<br \/>    image: wordpress<br \/>    depends_on:<br \/>      - db<br \/>    ports:<br \/>      - 80:80<br \/>    restart: always<br \/>    environment:<br \/>      - WORDPRESS_DB_HOST=db<br \/>      - WORDPRESS_DB_USER=wordpress<br \/>      - WORDPRESS_DB_PASSWORD={password}<br \/>      - WORDPRESS_DB_NAME=wordpress<br \/>      - WORDPRESS_DEBUG=0<br \/>      - 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');<br \/>    volumes:<br \/>      - .\/data\/wordpress:\/var\/www\/html<br \/>      - .\/data\/wordpress-static:\/var\/www\/html\/wp-content<br \/>      - .\/config\/apache2\/sites-enabled:\/etc\/apache2\/sites-enabled<br \/>      - .\/config\/apache2\/conf-enabled\/server-name.conf:\/etc\/apache2\/conf-enabled\/server-name.conf<br \/>      - .\/config\/php\/custom.ini:\/usr\/local\/etc\/php\/conf.d\/config.ini<br \/>      - .\/log\/apache2:\/var\/log\/apache2<br \/>    extra_hosts:<br \/>      - www.forensicshark.com:127.0.0.1<br \/><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Apache2 l\u00e4uft innerhalb des Docker-Containers nat\u00fcrlich 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\u00fcrlich nicht geht:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>The loopback request to your site failed, this means features relying on them are not currently working as expected.<br \/>Error: cURL error 7: Failed to connect to www.forensicshark.com port 443 after 0 ms: Couldn't connect to server (http_request_failed)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00fcgt der Proxy auch hinzu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact<br \/>\/\/ see also https:\/\/wordpress.org\/support\/article\/administration-over-ssl\/#using-a-reverse-proxy<br \/>if (isset($_SERVER&#091;'HTTP_X_FORWARDED_PROTO']) &amp;&amp; strpos($_SERVER&#091;'HTTP_X_FORWARDED_PROTO'], 'https') !== false) {<br \/>        $_SERVER&#091;'HTTPS'] = 'on';<br \/>}<br \/>\/\/ (we include this by default because reverse proxying is extremely common in container environments)<br \/><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>real_ip_header CF-Connecting-IP;<br \/>proxy_set_header X-Real-IP $remote_addr;<br \/>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br \/>proxy_set_header X-Forwarded-Host $server_name;<br \/>proxy_set_header X-Forwarded-Proto $scheme;<br \/>proxy_redirect off;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist mein Netflow-Diagram:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Besucher &gt; https:\/\/www.forensicshark.com &gt; Cloudflare CDN &gt; https:\/\/my.real.server.ip:443 &gt; ProxyManager &gt; http:\/\/192.168.1.1:80 &gt; WordPress LXC &gt; http:\/\/172.18.0.3:80 &gt; Docker Container (Apache2)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00fchren nicht zum gew\u00fcnschten Ziel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist meine Apache VirtualHost Configuration. Ganz basic, ohne gro\u00dfe ver\u00e4nderungen zur empfohlenen Konfiguration, mit ausnahme dem log-format:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80&gt;<br \/>        ServerName www.forensicshark.com<br \/><br \/>        ServerAdmin webmaster@forensicshark.com<br \/>        DocumentRoot \/var\/www\/html<br \/><br \/>        LogFormat \"%v:%p %a %{c}a %l %u %t \\\"%r\\\" %&gt;s %O \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" proxy_combined<br \/>        LogFormat \"%v %{CF_CONNECTING_IP}i (via cloudflare:%h) %l %u %t \\\"%r\\\" %&gt;s %b\" cloudflare<br \/>        ErrorLog ${APACHE_LOG_DIR}\/error.log<br \/>        CustomLog ${APACHE_LOG_DIR}\/access.log cloudflare<br \/>&lt;\/VirtualHost&gt;<br \/><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das rederict von HTTP auf HTTPS l\u00e4uft \u00fcber den Proxy Manager, so dass innerhalb des WordPress Docker Container nur der Port 80 f\u00fcr HTTP ge\u00f6ffnet sein muss.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In der server-name.conf von Apache2 ist auch die Domain eingetragen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ServerName www.forensicshark.com<\/code><\/pre>\n","protected":false},"template":"","class_list":["post-167258","topic","type-topic","status-publish","hentry","topic-tag-cloudflare","topic-tag-docker","topic-tag-loopback","topic-tag-lxc","topic-tag-proxy","topic-tag-rest"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/topic\/167258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":1,"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/topic\/167258\/revisions"}],"predecessor-version":[{"id":167264,"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/topic\/167258\/revisions\/167264"}],"wp:attachment":[{"href":"https:\/\/de.wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=167258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}