Errore 403 quando si modificano le impostazioni dopo aver abilitato force_https con proxy

Ciao a tutti, ho un problema: se abilito l’opzione force_https (dopo aver verificato che tutto sia su HTTPS), non riesco a:

  • modificare alcuna impostazione,
  • disconnettermi (cliccando su disconnetti non succede nulla),
  • o accedere (il reindirizzamento SSO mi riporta semplicemente alla home page disconnessa).

Pensavo fosse un caso o qualcosa che avevo rotto inizialmente, quindi ho distrutto l’app, eliminato tutti i dati e riavviato/avviato nuovamente l’app.

Con la nuova app, tutto funzionava di nuovo perfettamente: sono riuscito a ripristinare dai backup, configurare tutti i loghi, regolare diverse impostazioni (cambiare le impostazioni delle notifiche email, modificare il titolo, personalizzare il CSS del tema, ecc.) e non ci sono stati errori SSL; le immagini del brand si caricavano correttamente.

Tuttavia, non appena ho riabilitato l’opzione force_https, ho ricominciato a ricevere tutti gli errori 403.

Questa volta sono entrato nel container e ho disabilitato l’opzione force_https tramite la riga di comando, utilizzando:

/var/discourse/launcher enter app
rails c
SiteSetting.force_https = false

Non appena ho disabilitato l’opzione, tutto sul sito ha ricominciato a funzionare correttamente.

Ho cercato di esaminare i log (site_url.com/logs), ma non sembrava esserci molto, a parte quanto segue:

Error: Forbidden
Url: https://site_url.com/assets/ember_jquery-1d5617356dd43f27b8adbf60ccb854a1f5992b9b9f9e51e32ea7287fc9eeb25b.js
Line: 1
Column: 262166
Window Location: https://site_url.com/admin/plugins/chat/discord

che proveniva da un momento precedente, quando stavo modificando alcune impostazioni per il plugin discourse-chat-integration.

Non sono sicuro di come procedere e apprezzerei qualsiasi suggerimento.

Sei dietro qualche proxy strano?

Lo sto eseguendo su un server con un’altra applicazione PHP, quindi sto utilizzando un proxy pass di Nginx; la mia configurazione nginx:

server {
  server_name site_url;
  client_max_body_size 500m;

  location / {
      proxy_pass http://127.0.0.1:8080;
  }

    listen 443 ssl; # gestito da Certbot
    ssl_certificate /etc/letsencrypt/live/site_url/fullchain.pem; # gestito da Certbot
    ssl_certificate_key /etc/letsencrypt/live/site_url/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 = site_url) {
        return 301 https://$host$request_uri;
    } # gestito da Certbot


  listen 80;
  server_name site_url;
    return 404; # gestito da Certbot
}

Penso che tu non stia passando correttamente l’HTTPS. Cerca qui le soluzioni.

Ho completamente dimenticato di impostare le intestazioni del proxy; ho aggiunto quelle mancanti e ora tutto funziona correttamente.

Grazie!

Nel caso qualcuno incontri questo problema, ecco le intestazioni proxy_pass che mancavano:

proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;