Reverse Proxy für WordPress

hier stelle ich die Einstellungen vor um WordPress hinter einen Apache Reverse Proxy zu betreiben.

Der Testaufbau wurde durchgeführt mit:

Der Revers Proxy läuft in diesem Beispiel auf einem Debian in der Version 10.7, wenn ihr nicht wisst wie Ihr die Version abfragen könnt ist hier ein Beispiel für mehrere Distributionen.

Damit keine Informationen aus dem Cache geladen werden nutze ich den Firefox im Entwicklermodus und schalte den Cache ab, wenn Ihr nicht wisst wie dies funktioniert ist hier die Erklärung.

Ein Beispiel der Konfiguration für HTTPS

<VirtualHost *:443>
ServerName wordpress.kirsche2.synology.me
ServerAdmin Email@E-mail.com
# DocumentRoot /var/www/html/nas
SSLEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLProxyEngine On
SSLProxyVerify none

#Pfad zum Zertifikat
SSLCertificateKeyFile /home/XXX/privkey.pem
SSLCertificateFile /home/XXX/cert.pem
SSLCertificateChainFile /home/XXX/chain.pem


ProxyPreserveHost on
ProxyRequests Off

#Proxy Einstellungen WordPress
RequestHeader set X-Forwarded-Proto „https“
RequestHeader set X-Forwarded-Port „443“
ProxyPass    /wp-admin !
ProxyPass / http://IP-Adresse:Port/
ProxyPassReverse / „http://IP-Adresse:Port/

#Log
ErrorLog ${APACHE_LOG_DIR}/error-wordpress.log
CustomLog ${APACHE_LOG_DIR}/access-wordpress.log combined
</VirtualHost>

Aufbau der Datei

Ich gehe nicht auf alle Einstellungen ein, aber die Dokumentation von Apache ist sehr gut.

<VirtualHost *:443>

An welche IP-Adresse ist die 443 gebunden, in diesem Beispiel an jede IP-Adresse die im System vorhanden ist

ServerName

Ist der VHost für die Verarbeitung zuständig oder nicht? Wenn ich die Adresse https://www.kirsche84.com anspreche ist der VHost für die Verarbeitung zuständig, wenn ich die Adresse https://kirsche2.synology.me im Browser eingebe ist dieser VHost dann nicht zuständig.

SSLCertificateKeyFile

Wie der Name schon sagt der Schlüssel vom Zertifikat


SSLCertificateFile

Wie der Name schon sagt das Zertifikat


SSLCertificateChainFile

Wie der Name schon sagt die Schlüssel Kette

ProxyPreserveHost

Sorgt dafür, dass das Header-Feld Host nicht auf internal.server umgeschrieben wird.


ProxyRequests

Die Einstellung wird zur Weiterleitung von Requests an Server im Internet genutzt, was wir hier nicht wollen.
Die Einstellung ist bei Apache 2.4 als voreinstellung auch off und hier nur wegen Fehleinstellungen erwähnt.
Man sprich in diesem Fall von einem offenen Proxy.

RequestHeader set X-Forwarded-Proto „https“

Welcher Kopf von der Anfrage soll weitergeleitet werden


RequestHeader set X-Forwarded-Port „443“

Welcher Port soll weitergeleitet werden

ProxyPass

Ab wo soll weitergeleitet werden. Das / sagt das alles ab der Domain weitergeleitet wird. Es ist auch möglich eine Unterseite weiterzuleiten, wenn ich aber z.B. ab /wordpress weiterleiten möchte wird nur ab hier weitergeleitet und die Originale Domain bleibt auf dem Webserver oder wird anders weitergeleitet. Danach wird angegeben wohin weitergeleitet wird, da ich in diesem Beispiel nicht von einem Man in the Middle angriff ausgehen ist auch das Protokoll nur HTTP, wenn die Einrichtung mit HTTPS gemacht werden soll muss die Datei geändert werden.


ProxyPassReverse

Auch untergeordnete Ziele werden an internal.server weitergeleitet.


LOG

Wo wird das LOG gespeichert, wenn Fehler gesucht werden ist es sehr hilfreich

#

Kommentare

Module

Es müssen noch die Module für den Apache geladen werden.

/usr/sbin/a2enmod proxy

/usr/sbin/a2enmod proxy_http

WordPress Synology

Die WordPressinstallation habe unter einem anderen Artikel beschrieben weil nicht das Synology-Paket genutzt wurde.

Ein Beispiel der Konfiguration für die WP-Conf

In die WP-Conf muss noch dieser PHP-Code eingebunden werden und ich habe zum testen die Adresse in der Datei eingetragen damit ich diese nicht über die Datenbank ändern muss im Fehlerfall, kann später gelöscht oder auskommentiert werden.

define( 'WP_SITEURL', 'https://www.kirsche84.com' );
define( 'WP_HOME', 'https://www.kirsche84.com' );
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
    $parts = explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"]);
    $_SERVER['REMOTE_ADDR'] = $parts[0];
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert