Ich konfiguriere einen Nginx-Server so, dass er als Reverse-Proxy für eine Django-App (auf Gunicorn ausgeführt) dient.
Mein Problem ist, dass ich möchte, dass meine Site mit HTTPS gesichert wird, und dass meine Django-App feststellen kann, ob eine Verbindung sicher ist oder nicht. Ich verwende Django 1.4, habe also Zugriff auf das SECURE_PROXY_SSL_HEADER
, als das ich konfiguriert habe SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
.
Wie in der Dokumentation erwähnt, muss ich jetzt sicherstellen, dass Nginx den Header nur bei Bedarf hinzufügt und ihn entfernt, wenn dies nicht der Fall ist. Da ich möchte, dass meine Nginx-Konfiguration so trocken wie möglich ist, hätte ich lieber keine zwei Konfigurationsdateien (eine für Port 80 und eine für Port 443).
Daher möchte ich wissen, ob es in Nginx eine Möglichkeit gibt, festzustellen, ob die Verbindung https ist, und einen Header entsprechend hinzuzufügen (oder zu entfernen).
quelle
$scheme
Variable vorher nicht zu kennen !Antworten:
Diese Lösung beschreibt nicht , wie ein Header nur über HTTP entfernt wird, wie im Fragentitel angegeben.
Eine sichere Lösung für Ihr Problem ist das Hinzufügen
Es wird festgelegt ,
X-Forwarded-Protocol
umhttp
auf HTTP - Anfragen undhttps
auf HTTPS - Anfragen.Dadurch wird sichergestellt, dass dieser Header überschrieben wird, wenn der Client ihn gemäß https://docs.djangoproject.com/de/1.4/ref/settings/#secure-proxy-ssl-header festgelegt hat .
HINWEIS: Wenn Sie Ihr Django - Projekt gemeinsam nutzen, stellen Sie bitte sicher genug über diese Benutzer zu warnen , wenn Sie einschließlich
SECURE_PROXY_SSL_HEADER
insettings.py
und bestem Kommentar es standardmäßig aus.quelle