Probleme mit Force HTTPS, Proxy und Einladungen

My Discourse instance is behind a 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; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

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

    server_name forum.smbcn.org;

    listen 80;
    return 404; # managed by Certbot

}

Which leads to the server Discourse is installed on (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;
        }
}

When I force HTTPS, invited users cannot proceed to registration. Browser logs show a 403 error (bad CSRF), even though a CSRF token was successfully generated. Invitations work just fine when HTTPS is not forced.

I guess something is wrong with the way I proxy HTTPS requests to HTTP, maybe some missing headers?

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.