• 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.1

    Apache2 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]

Ansicht von 2 Antworten – 1 bis 2 (von insgesamt 2)
  • Moderator threadi

    (@threadi)

    Deine Frage ist schon sehr speziell und sehr technisch. Das Forum hier richtet sich eher an die Anwender von WordPress. Ich würde dir empfehlen dein Anliegen in einer Community zu fragen, die auf eher solche Netzwerkkonfigurationen spezialisiert ist. Möglich wäre dafür denke ich auch diese hier: https://wordpress.stackexchange.com

    Thread-Starter pucciano

    (@pucciano)

    Vielen Dank für den Hinweiß, ich versuche es dann bei Stack Exchange.

Ansicht von 2 Antworten – 1 bis 2 (von insgesamt 2)