È disattivata. X-Forwarded-Proto è presente nel mio blocco del server. Quindi, l’unico elemento (o gli unici elementi) che non sto utilizzando, in base ai link che avete condiviso, è questo:
# modelli di base utilizzati; possono essere ridotti per includere meno funzionalità nei modelli dei container: # - "templates/cron.template.yml" # cron è ora incluso nell'immagine di base - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/sshd.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # rimuovere - https sarà gestito da nginx esterno - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" # <-- Aggiunto # quali porte esporre? # expose: commenta l'intera sezione
Ho caricato il sito in 3 browser (Edge, Firefox e Chrome mobile) e ho ottenuto un certificato perfettamente valido come anonimo. Quali sono i tuoi passaggi per riprodurre questo problema?
Registrati come utente; una volta completata la registrazione e effettuato l’accesso, si scatena l’inferno e ricevo gli errori segnalati in precedenza.
Non è successo nulla di grave qui. Un possibile problema è che le tue email contengono ancora il link http://. Tuttavia, sono stato correttamente reindirizzato al sito HTTPS per attivare il mio account e non vedo errori relativi a SSL.
Quindi sì, sono sicuro al 99% che force_https non sia abilitato o che ci sia qualcosa di gravemente sbagliato nella tua installazione che sta causando questo problema.
È proprio qui che ti sbagli. Se l’opzione “forza HTTPS” è abilitata, Discourse deve inviare tutti i link come HTTPS. Ogni singolo link relativo al forum deve essere caricato tramite HTTPS. Se continui a fare cose strane e non segui il metodo consigliato, sei da solo. Non possiamo andare oltre le procedure standard che funzionano.
Per me non ha molto senso. Se lo analizziamo logicamente, sto essenzialmente facendo esattamente ciò che è destinato a fare force-https, ma all’interno del blocco server.
force_https non è semplicemente una riscrittura: internamente fa molto di più. Se vuoi che i tuoi problemi vengano risolti, è già stata fornita una soluzione. Se rifiuti la soluzione, sentiti libero di prendere in mano la situazione ed esplorare nuove strade.
Questo è dovuto al tuo reverse proxy instabile. Dovrai scoprire cosa non va e agire nel modo corretto. Non possiamo fornire assistenza con le tue soluzioni personali.
Tutte le “soluzioni” presentate non si adattano al mio caso d’uso specifico:
Server remoto (all’interno della stessa rete) – Credo che tutti gli esempi presuppongano che Nginx sia eseguito sullo stesso server di Discourse; io sto utilizzando proxy_pass per raggiungere un altro IP interno
Perché ho fatto questo? Maggiore sicurezza e distribuzione delle risorse. È la stessa ragione per cui ho suddiviso i servizi in due modi: tramite container e VM. La documentazione suggerita sembra favorire una condizione in cui tutti i servizi sono eseguiti sullo stesso server.
Immagino che le condizioni descritte sopra siano piuttosto comuni. Se qualcuna di esse può essere utilizzata per adattarsi a una condizione proxy_pass, sono più che disposto a modificare le mie impostazioni di conseguenza. Sento solo che fornire una generica affermazione del tipo “sei solo” perché sto cercando di evitare uno scenario del tipo “mettere tutte le uova nello stesso paniere” è un po’ ingiustificato.
È una tua preferenza, l’ho scritta come esempio. Puoi anche scegliere di esporre la porta 80.
Non c’è alcun vantaggio o senso nell’abilitare SSL su una rete locale.
Questo deve esistere.
server {
listen 80;
server_name discourse.example.com;
return 301 https://example.com$request_uri;
}
È esattamente ciò che sta accadendo: stai inoltrando tutte le richieste ricevute dal tuo proxy/ingress a un backend interno sulla porta 8080 (ovvero Discourse).
Risposto al punto #1: era una preferenza personale, sentiti libero di utilizzare la porta che preferisci.
Non hai bisogno di nulla che riguardi socket o SSL sul server interno. SSL dovrebbe essere terminato correttamente sul reverse-proxy.
NB: la maggior parte di queste scelte è basata su preferenze personali legate alla distribuzione per i clienti.
Il comportamento che sto riscontrando si verifica nelle condizioni sopra indicate.
L’inizio di app.yml è il seguente:
## questo è il modello del contenitore Docker Discourse standalone all-in-one ## ## Dopo aver apportato modifiche a questo file, DEVI ricostruire ## /var/discourse/launcher rebuild app ## ## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA! ## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NELLO SPAZIATURA O NELL'ALLINEAMENTO! ## visita http://www.yamllint.com/ per convalidare questo file quando necessario
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" ## Scommenta queste due righe se desideri aggiungere Lets Encrypt (https) #- "templates/web.ssl.template.yml" #- "templates/web.letsencrypt.ssl.template.yml"
## quali porte TCP/IP deve esporre questo contenitore? ## Se vuoi che Discourse condivida una porta con un altro server web come Apache o nginx, ## consulta https://meta.discourse.org/t/17247 per i dettagli expose: - "80:80" # http - "443:443" # https
## Imposta db_shared_buffers a un massimo del 25% della memoria totale. ## verrà impostato automaticamente durante l'avvio in base alla RAM rilevata, oppure puoi sovrascriverlo db_shared_buffers: "1024MB"
## può migliorare le prestazioni di ordinamento, ma aumenta l'utilizzo di memoria per connessione #db_work_mem: "40MB"
## Quale revisione Git dovrebbe utilizzare questo contenitore? (predefinito: tests-passed) #version: tests-passed
Stai effettuando la connessione alla porta 80 sul secondo nginx, quindi pensa che tu ti stia connettendo a HTTP e non a HTTPS.
Prova a cercare X-Forwarded-Proto nell’nginx interno e modifica proxy_set_header X-Forwarded-Proto $thescheme; in proxy_set_header X-Forwarded-Proto https;
oppure inoltra il tuo traffico a HTTPS proxy_pass https://192.168.86.108