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

Ich wollte die Installation über den Reverse-Proxy von Apache durchführen und habe versucht, sie mit einem benutzerdefinierten Port zu installieren, aber es hat nicht funktioniert.
Gibt es eine Möglichkeit, dies zu tun?

Prüfe deinen Domainnamen . . .
WARNUNG: Port 443 des Computers scheint über den Hostnamen nicht erreichbar zu sein:  
DOMAIN-NAME
WARNUNG: Die Verbindung zu DOMAIN-NAME (Port 80) schlägt ebenfalls fehl.

Dies deutet darauf hin, dass DOMAIN-NAME auf eine IP-Adresse aufgelöst wird, die nicht diesen
Computer erreicht, auf dem du Discourse installierst.

Das erste, was zu tun ist, besteht darin, zu bestätigen, dass DOMAIN-NAME auf die IP-Adresse dieses Servers aufgelöst wird.
Dies geschieht normalerweise am selben Ort, an dem du die Domain gekauft hast.

Wenn du sicher bist, dass die IP-Adresse korrekt aufgelöst wird, könnte es ein Firewall-Problem sein.
Eine Websuche nach „Ports öffnen DEIN CLOUD-DIENST

Sie können discourse-setup nicht verwenden, aber Sie können suchen: Einrichtung von Discourse auf einem Server mit vorhandenen Apache-Sites

Vielen Dank.
Ich habe die Anleitung befolgt, um Discourse zu erstellen.
Der Reverse-Proxy in Apache funktioniert jedoch nicht ordnungsgemäß.

    ProxyPass / ws://var/discourse/shared/standalone/nginx.http.sock
    ProxyPassReverse / ws://var/discourse/shared/standalone/nginx.http.sock

Fehler

Kein Protokoll-Handler war für die URL /favicon.ico gültig (Schema 'ws'). Wenn Sie eine DSO-Version von mod_proxy verwenden, stellen Sie sicher, dass die Proxy-Submodule in der Konfiguration über LoadModule enthalten sind.

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.

Ich bin fertig
Vielen Dank!
Hier ist, was wir tatsächlich eingerichtet haben!

<VirtualHost *:80>
  ServerName DOMAIN-NAME
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
    ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
    ProxyPassReverse  / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
</VirtualHost>

Willkommen!

Sehen Sie, wie einfach das ist?

Apache2 als Reverse-Proxy für Discourse einzurichten ist ein Kinderspiel, wie Sie mit Ihrer einfachen Port-80-Konfiguration ohne HTTPS zeigen. Gut gemacht :slight_smile:

Wir haben den Zugriff auf die Website über HTTPS ebenfalls erfolgreich getestet.
Ich habe zudem einen Reverse-Proxy in Apache eingerichtet, um auf HTTPS umzuleiten.
Allerdings scheinen die Ressourcen weiterhin über HTTP abgerufen zu werden und werden nicht korrekt angezeigt.
Was kann ich tun?

Du solltest deine funktionierenden Konfigurationsdateien für deine virtuellen Hosts posten, da niemand sie sehen oder dir helfen kann, wenn du sie nicht veröffentlichst :slight_smile:

Übrigens: Ich habe voll funktionsfähige, betriebene (Produktions-)Konfigurationsdateien für virtuelle Hosts für dieselbe Konfiguration gepostet, die du versuchst einzurichten. Wenn du sie verstehst und befolgst, solltest du überhaupt keine Probleme haben :wink:

So habe ich es eingerichtet.
Es sieht so aus, als ob alle von Discourse generierten URLs http sind.

<VirtualHost *:80>
  ServerName DOMAIN-NAME
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
  ServerName DOMAIN-NAME
  SSLEngine On
  SSLProtocol all -SSLv2
  SSLCertificateFile /etc/letsencrypt/live/DOMAIN-NAME/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/DOMAIN-NAME/privkey.pem
  ProxyPreserveHost on
  RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
  RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
  ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
  ProxyPassReverse  / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
</VirtualHost>

Du solltest DISCOURSE_FORCE_HTTPS auf true setzen oder diese Einstellung in deinen Systemeinstellungen konfigurieren.

Hallo! Das Skript discourse-setup führt hierher, wenn die Ports 80/443 bereits belegt sind, aber diese Anweisungen gelten nicht für Neuinstallationen. Wie kann ich eine Neuinstallation mit meinem eigenen Reverse-Proxy durchführen?

Versuch folgendes:

./discourse-setup  --skip-connection-test --skip-rebuild

Danach musst du die app.yml noch manuell bearbeiten, aber zumindest werden die angeforderten Angaben ausgefüllt.

Lass mich bitte wissen, ob es hilft, damit jemand das Howto entsprechend anpassen kann.

Ich habe das Skript so angepasst, dass es eine Variable für HTTP_PORT und HTTPS_PORT verwendet. Allerdings ist das keine saubere Lösung, da die Änderungen verloren gehen. Ich denke, du kannst das ruhig im Beitrag erwähnen – das wird für eine Erstinstallation hilfreich sein :slight_smile:

Du hast die Änderungen in der app.yml vorgenommen? Wann denkst du, dass sie verloren gehen werden?