Nginx: intestazione striscia su HTTP, aggiungere intestazione su HTTPS

Sto configurando un server Nginx in modo da servire come proxy inverso per servire un'app Django (eseguire su Gunicorn).

Il mio problema è che voglio che il mio sito sia protetto con HTTPS e quindi voglio che l'applicazione Django sia in grado di determinare se una connessione è sicura o less. Sto usando Django 1.4, quindi ho accesso al SECURE_PROXY_SSL_HEADER , che ho configurato come SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') .

Ora, come menzionato dalla documentazione, devo assicurarmi che Nginx aggiunga solo l'intestazione quando necessario, e la striscia quando non. Poichè vorrei che la mia configuration di Nginx sia il più asciutto ansible, preferisco non avere due file di configuration (uno per la port 80 e uno per la port 443).

Pertanto, vorrei sapere se c'è un modo per Nginx per determinare se la connessione è https e aggiungere (o strip) un'intestazione di conseguenza.

  • NGINX / PHP-FPM estremamente lento quando si accede tramite https / SSL
  • Impostazione di host virtuali SSL in Apache
  • Ultimo (credo e spero) problemi che configurano il certificato SSL con Apache e VirtualHosts
  • Nessun algorithm di crittografia comune (ssl_error_no_cypher_overlap)
  • Come distriggersre SSLv2 o SSLv3?
  • Redirect https .com a https .co.uk senza un certificato SSL valido su .com senza modifiche DNS
  • differenze di certificati SSL?
  • L'istanza di SQL Server consente contemporaneamente le connessioni sicure e non protette?
  • One Solution collect form web for “Nginx: intestazione striscia su HTTP, aggiungere intestazione su HTTPS”

    Questa soluzione non descrive come eliminare un'intestazione solo su HTTP, come viene chiesto nel titolo della domanda.

    Una soluzione sicura per il tuo problema è aggiungere

     proxy_set_header X-Forwarded-Protocol $scheme; 

    X-Forwarded-Protocol a http sulle richieste HTTP e per https sulle richieste HTTPS.

    Ciò assicura che questa intestazione sia ignorata se il client lo imposta, come richiesto da https://docs.djangoproject.com/it/1.4/ref/settings/#secure-proxy-ssl-header .


    NOTA: se stai condividendo il tuo progetto Django, ti preghiamo di avvisare in modo sufficiente gli utenti su questo se SECURE_PROXY_SSL_HEADER in settings.py e segnalatelo meglio per impostazione predefinita.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.