hier stelle ich die Einstellungen vor um WordPress hinter einen Apache Reverse Proxy zu betreiben.
Der Testaufbau wurde durchgeführt mit:
- Apache
- Revers Proxy
- Module
- Synology
- WordPress Webservice
- WP_Conf
- Browser
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]; }