Möchte Discourse neben Apache betreiben

Ich habe ein paar Tutorials gesehen, die erklären, wie man das macht, aber sie gehen unterschiedliche Wege, was mir nicht weiterhilft. Gibt es eine Möglichkeit, eine Apache-Virtual-Host-Konfiguration für Discourse zu erstellen, sodass eine bestimmte Domain genau wie bei anderen Websites und den entsprechenden Domains auf die Software weiterleitet?

Vielen Dank.

Ja. Diese Tutorials erklären, wie es geht.

Oder, wenn du meinst, ob du Discourse ohne Docker und Apache als Reverse-Proxy betreiben kannst: Die Antwort ist nein.

Für 5 $ im Monat kannst du dir diesen Ärger sparen.

Danke für die Antwort.

Ich betreibe es auf einem VPS. Apache ist installiert, aber ich habe nicht viel Erfahrung mit Websites. Ich schaue mir das hier an: Run other websites on the same machine as Discourse

Dabei scheint es jedoch so, als müsste ich wegen der Konfigurationsdateien Nginx verwenden. Meine Frage ist also: Kann ich das Gleiche auch mit Apache machen?

Schauen Sie sich Set up Discourse on a server with existing Apache sites an

Ja, ich habe mir das auch angesehen. Er hat es für CentOS und nicht für Ubuntu behandelt, einige Teile sind mir unklar.

Wenn du dich damit nicht auskennst (und dich nicht damit auseinandersetzen möchtest), empfehle ich dir dringend, Apache zu entfernen und nur Discourse auf dem VPS laufen zu lassen. Falls du mehr Anwendungen betreiben musst, besorge dir einen separaten VPS für Apache-Anwendungen und einen weiteren für Discourse.

Also ich bin zu Nginx gewechselt und alles funktioniert. Ich bin mir ziemlich sicher, dass SSL korrekt eingerichtet ist, aber Chrome zeigt mir die Meldung „Ihre Verbindung zu dieser Website ist nicht vollständig sicher

Das SSL ist mit dem nginx-Dienst innerhalb des Containers eingerichtet. Wenn der Container ins Internet exponiert ist und Sie direkt über den Browser darauf zugreifen (Standard-Installation von Discourse), verfügen Sie über SSL.

Wenn Sie jedoch einen Reverse-Proxy davor schalten (sei es Apache, Nginx oder ein Dienst eines Drittanbieters wie Cloudflare), müssen Sie sicherstellen, dass die Verbindung zwischen dem Browser und dem Reverse-Proxy gesichert ist.

In Ihrem Fall müssen Sie also Zertifikate für den nginx-Reverse-Proxy generieren (ich denke nicht, dass Sie die SSL-Vorlagen von Discourse hinzufügen müssen, da der Container nicht direkt ins Internet exponiert ist; Sie können es tun, müssen aber nicht).

Sie können sich ansehen, wie das mit Let’s Encrypt funktioniert (kostenlos, dasselbe, das in der Standardinstallation von Discourse verwendet wird, aber in diesem Fall für das nginx außerhalb des Containers).

TL;DR Der nginx, der als Reverse-Proxy fungiert, benötigt SSL. Der nginx, der sich innerhalb des Containers befindet, benötigt kein SSL (vorausgesetzt, Sie greifen von derselben Maschine aus zu).

Um die Sicherheit zwischen Browser und Reverse-Proxy zu gewährleisten, muss ich SSL in der Nginx-Konfigurationsdatei konfigurieren?

Vielen Dank

This is my config here, what else do I need to add?

server {
listen 80; listen [::]:80;
server_name a1rp.xyz; # <-- change this

return 301 https://$host$request_uri;

}

server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name a1rp.xyz; # <-- change this

ssl on;
ssl_certificate      /var/discourse/shared/standalone/ssl/a1rp.xyz.cer;
ssl_certificate_key  /var/discourse/shared/standalone/ssl/a1rp.xyz.key;
ssl_dhparam          /var/discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

http2_idle_timeout 5m; # up from 3m default

location / {
    proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;
}

}

Stellen Sie sicher, dass Sie:

  1. Alle SSL-Vorlagen in templates (in app.yml) auskommentieren. Wenn Sie Let’s Encrypt verwenden, haben Sie zwei:
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. Eine Socket-Vorlage hinzufügen:
- "templates/web.socketed.template.yml" 
  1. Alle exponierten Ports auskommentieren:
# - "80:80"   # http
# - "443:443" # https

(Oder Sie können andere Ports wie 8080:80 und 8443:443 exponieren und anstelle der Verwendung eines Sockets im nächsten Schritt zu einem Upstream weiterleiten, der auf localhost:80 und/oder localhost:443 zeigt.)

  1. Sie haben:
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;

Ich denke, Sie müssen am Ende des Sockets ein : hinzufügen:

proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
  1. Sie müssen die SSL-Zertifikatsdateien unter /var/discourse/shared/standalone/ssl/ haben. Haben Sie diese? Ich gehe davon aus, dass Sie bereits die Domain a1rp.xyz besitzen und auf der Let’s Encrypt-Website gelesen haben, wie man SSL-Zertifikate erstellt. Denken Sie auch daran, dass Discourse bei der Standardinstallation die Erneuerung der Zertifikate für Sie übernimmt. In Ihrem Fall müssten Sie dies jedoch selbst verwalten (z. B. mit einem Cron-Job), sonst laufen Ihre Zertifikate nach 3 Monaten ab.

Siehe:

Ja, ich habe alles, was du sagtest, in der App-Konfiguration (einschließlich des Beitrags zur Korrektur einiger Dinge). Was das : angeht, ich glaube nicht, dass es einen Unterschied macht. Es gab einen Beitrag, der besagte, dass dort ebenfalls kein : stehen sollte. Die SSL-Dateien habe ich auch bereits.

Ich habe das Problem also behoben. Jemand erwähnte, dass das Favicon in HTTP angezeigt wurde, was den Fehler verursacht hat. Ich habe etwas anderes hochgeladen und wieder gelöscht, und jetzt ist die Website vollständig über HTTPS gesichert :slight_smile: