Problemi con force https, proxy e inviti

La mia istanza di Discourse si trova dietro un 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; # gestito da Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # gestito da Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # gestito da Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # gestito da Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestito da Certbot

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

    server_name forum.smbcn.org;

    listen 80;
    return 404; # gestito da Certbot

}

Che punta al server su cui è installato Discourse (installazione Docker standard):

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;
        }
}

Quando forzato l’HTTPS, gli utenti invitati non riescono a procedere con la registrazione. I log del browser mostrano un errore 403 (CSRF errato), anche se il token CSRF è stato generato correttamente. Gli inviti funzionano perfettamente quando l’HTTPS non è forzato.

Immagino che ci sia qualcosa di sbagliato nel modo in cui instrado le richieste HTTPS verso HTTP, forse mancano alcuni header?

Sembra che mi stia davvero perdendo qualcosa. L’impossibilità di forzare HTTPS implica che il logo non può essere visualizzato (non è così grave al momento). Oggi ho appena scoperto di ricevere anche un errore relativo al CSRF (

Forse hai solo bisogno di abilitare il forced HTTPS sul tuo proxy frontale e disabilitarlo su Discourse.

@hawm Penso che questa sia la mia configurazione attuale.

Come stai impostando la variabile $scheme?

Non lo faccio, immagino di fare affidamento sul valore predefinito, è sbagliato?

Se stai usando un proxy, le cose possono andare storte. Nella mia esperienza, questa è la ragione principale dei problemi che stai descrivendo. Prova a impostarlo su “https” invece (magari semplicemente evita la variabile e inserisci direttamente “https”).

@michaeld sì! Ci hai azzeccato! Grazie mille!