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?

1 Mi Piace

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 (

1 Mi Piace

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?

3 Mi Piace

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”).

2 Mi Piace

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

1 Mi Piace

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