Ich möchte mit einem Reverse Proxy für Apache installieren

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:

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

6 „Gefällt mir“