Lieber @Teraterayuki,
hier ist eine Beispielkonfiguration für funktionierende Apache2-Virtual-Hosts für einen Reverse-Proxy zu einem Unix-Domain-Socket in einem Discourse-Container:
Port 80
<VirtualHost *:80>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
ProxyPreserveHost On
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
# Verfügbare Log-Level: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Es ist auch möglich, das Log-Level für bestimmte
# Module zu konfigurieren, z. B.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Für die meisten Konfigurationsdateien aus conf-available/, die
# auf globaler Ebene aktiviert oder deaktiviert werden, ist es möglich,
# eine Zeile nur für einen bestimmten Virtual-Host einzufügen. Zum Beispiel
# die folgende Zeile aktiviert die CGI-Konfiguration nur für diesen Host,
# nachdem sie global mit "a2disconf" deaktiviert wurde.
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
RewriteEngine on
RewriteCond %{SERVER_NAME} =mysite.mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Port 443
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #nach Einrichtung von Let's Encrypt auf dem Reverse-Proxy aktivieren
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Bytespider|Yandex|Wget|seocompany|CCBot|Cincraw) [NC]
RewriteRule . - [R=403,L]
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
# Verfügbare Log-Level: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Es ist auch möglich, das Log-Level für bestimmte
# Module zu konfigurieren, z. B.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Für die meisten Konfigurationsdateien aus conf-available/, die
# auf globaler Ebene aktiviert oder deaktiviert werden, ist es möglich,
# eine Zeile nur für einen bestimmten Virtual-Host einzufügen. Zum Beispiel
# die folgende Zeile aktiviert die CGI-Konfiguration nur für diesen Host,
# nachdem sie global mit "a2disconf" deaktiviert wurde.
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
SSLCertificateFile /etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
@Teraterayuki
Bitte beachte, dass bei dieser Konfiguration der Proxy über einen Unix-Socket und nicht über einen WebSocket (ws) läuft.
Beachte auch, dass du bei dieser Konfiguration die Let’s-Encrypt-Informationen nicht manuell hinzufügen musst. Du kannst mit folgendem beginnen:
Port 80 vor der Ausführung von Certbot
<VirtualHost *:80>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
ProxyPreserveHost On
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
# Verfügbare Log-Level: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Es ist auch möglich, das Log-Level für bestimmte
# Module zu konfigurieren, z. B.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Für die meisten Konfigurationsdateien aus conf-available/, die
# auf globaler Ebene aktiviert oder deaktiviert werden, ist es möglich,
# eine Zeile nur für einen bestimmten Virtual-Host einzufügen. Zum Beispiel
# die folgende Zeile aktiviert die CGI-Konfiguration nur für diesen Host,
# nachdem sie global mit "a2disconf" deaktiviert wurde.
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
Port 443 vor der Ausführung von Certbot
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #nach Einrichtung von Let's Encrypt auf dem Reverse-Proxy aktivieren
RewriteEngine On
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
# Verfügbare Log-Level: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Es ist auch möglich, das Log-Level für bestimmte
# Module zu konfigurieren, z. B.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Für die meisten Konfigurationsdateien aus conf-available/, die
# auf globaler Ebene aktiviert oder deaktiviert werden, ist es möglich,
# eine Zeile nur für einen bestimmten Virtual-Host einzufügen. Zum Beispiel
# die folgende Zeile aktiviert die CGI-Konfiguration nur für diesen Host,
# nachdem sie global mit "a2disconf" deaktiviert wurde.
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
</IfModule>
Wenn du dann folgenden Befehl ausführst:
certbot -d mysite.mydomain.com
wird der freundliche certbot automatisch den erforderlichen SSL-Code für dich hinzufügen.
Nachdem unser Freund certbot seine Konfigurationszeilen hinzugefügt hat und alles wie erwartet funktioniert, kannst du diese Zeile wieder aktivieren:
#SSLProxyEngine on #nach Einrichtung von Let's Encrypt auf dem Reverse-Proxy aktivieren
und apache2 erneut neu starten.
Ich hoffe, das hilft dir, @Teraterayuki.
Pass gut auf dich auf.
Abschließende Hinweise:
- Bitte beachte, dass wir in unseren Apache2-Reverse-Proxy-Konfigurationen kein
haproxy verwenden. haproxy fügt eine unnötige Komplexitätsebene hinzu, ohne einen spürbaren Vorteil (für uns) zu bieten. Daher betreiben wir Apache2 als Reverse-Proxy auf „die einfache Art“. Wenn du haproxy verwenden möchtest, mag das für dich anders sein (YMMV); aber ehrlich gesagt verwenden wir haproxy nicht (bei mehreren Apache2-Reverse-Proxy-Setups in Produktion) und hatten noch nie Probleme mit Apache2 als Reverse-Proxy.
- Wenn du
mod_pagespeed nicht verwendest, kommentiere diese Zeilen aus. Wenn du jedoch mod_pagespeed betreibst, schalte mod_pagespeed pro Virtual-Host aus, wenn du einen Reverse-Proxy zu Discourse einrichtest.
Alles Gute… und ich hoffe, das hilft dir auf irgendeine kleine Weise.