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

  • nginx non riesce ad avviare il boot con systemd su Ubuntu 15.04 e 15.10
  • Ho riferito correttamente la catena del certificato SSL del mio sito?
  • HttpGeoipModule $ geoip_country_code è vuoto
  • Come impostare robots.txt globalmente in nginx per tutti gli host virtuali
  • Qual è la differenza tra la port SFTP 22 o la port 990?
  • connect () non riuscito (111: Connessione rifiutata) durante la connessione a monte
  • 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.

  • Come posso impostare un server web fuori casa?
  • Elevato carico senza spiegazioni
  • Qualche raccomandazione per un sistema di trasferimento file grande basato su Web?
  • Applicazione Web per gestire la distribuzione del software
  • Equivalente di phpMyAdmin per MSSQL?
  • Il proxy inverso Apache2 sembra bloccarsi intermittentemente?
  • 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.