Probleme mit Force HTTPS, Proxy und Einladungen

Meine Discourse-Instanz befindet sich hinter einem Proxy:

server {
    server_name forum.[...];

    location / {
        proxy_pass http://IP_ADDRESS;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;

    }

    client_max_body_size 10m;

    listen 443 ssl; # verwaltet von Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # verwaltet von Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # verwaltet von Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # verwaltet von Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # verwaltet von Certbot

}
server {
    if ($host = forum.[...]) {
        return 301 https://$host$request_uri;
    } # verwaltet von Certbot

    server_name forum.smbcn.org;

    listen 80;
    return 404; # verwaltet von Certbot

}

Dies führt zum Server, auf dem Discourse installiert ist (Standard-Docker-Installation):

server {
        listen 80; listen [::]:80;
        server_name forum.[...];

        client_max_body_size 10m;

        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 $scheme;
                proxy_set_header X-Real-IP $remote_addr;
        }
}

Wenn ich HTTPS erzwinge, können eingeladene Benutzer die Registrierung nicht abschließen. Die Browser-Protokolle zeigen einen 403-Fehler (schlechtes CSRF), obwohl ein CSRF-Token erfolgreich generiert wurde. Einladungen funktionieren einwandfrei, wenn HTTPS nicht erzwungen wird.

Ich vermute, dass bei der Weiterleitung von HTTPS-Anfragen an HTTP etwas nicht stimmt, möglicherweise fehlen einige Header.

1 „Gefällt mir“

Es sieht so aus, als würde mir etwas Wichtiges fehlen. Dass ich HTTPS nicht erzwingen kann, bedeutet, dass das Logo nicht angezeigt werden kann (im Moment nicht allzu ernst). Heute habe ich zudem festgestellt, dass beim Versuch, eine Aufgabe in Sidekiq zu entfernen, ein CSRF-bezogener Fehler („forbidden“) auftritt. Das hier habe ich in /var/discourse/shared/standalone/log/rails/unicorn.stderr.log gefunden:

WARN – : attack prevented by Rack::Protection::HttpOrigin

Ich fühle mich ziemlich hilflos. Jede Hilfe wäre sehr willkommen.

1 „Gefällt mir“

Vielleicht müssen Sie nur HTTPS auf Ihrem Front-Proxy erzwingen und in Discourse deaktivieren.

@hawm Ich denke, dies ist meine aktuelle Konfiguration.

Wie stellst du die Variable $scheme ein?

3 „Gefällt mir“

Ich nicht, ich vermute, ich verlasse mich auf den Standardwert. Ist das falsch?

Wenn Sie einen Proxy verwenden, kann dies schiefgehen. Nach meiner Erfahrung ist dies der häufigste Grund für die von Ihnen beschriebenen Probleme. Versuchen Sie stattdessen, „https

2 „Gefällt mir“

@michaeld ja! Du hast es perfekt getroffen! Vielen Dank!

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.