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

  • Errore SSL: errore: 0B080074: x509 routine di certificati: X509_check_private_key: valori chiave non corrispondenti
  • Soluzione Nginx per i controlli di salute di AWS Amazon ELB - ritorna 200 senza IF
  • Come faccio a verificare se i miei certificati SSL sono stati revocati
  • Impostazione di ELB con SSL - Che cosa è l'authentication Backend?
  • Test di OpenSSL SHA256
  • "Echo 0> / proc / sys / kernel / hung_task_timeout_secs" distriggers questo messaggio
  • 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.

  • C'è un sapore preferito di linux per l'hosting di applicazioni web?
  • Che cosa provoca un errore di errore di 400 errori per null ("") e perché i nostri log di nginx hanno tanti?
  • Suggerimenti per il backup del server Ubuntu
  • Può un crash tomcat di un'applicazione di database ctriggers?
  • Elevato carico senza spiegazioni
  • Standard industriale per più nodes app su un unico VPS?
  • 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.