Derzeit habe ich eine ELB, die sowohl http://www.example.org als auch https://www.example.org bedient .
Ich möchte es so einrichten, dass jede Anfrage, die auf http://www.example.org verweist, auf https://www.example.org umgeleitet wird .
Die ELB sendet die https-Anforderungen als http-Anforderungen. Verwenden Sie dazu:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
funktioniert nicht, da Anforderungen an https://www.example.org weiterhin an Port 80 unter nginx gesendet werden.
Ich weiß, es ist möglich, es als umzuschreiben
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Aber alles, was ich gelesen habe, if
sollte unbedingt in der Nginx-Konfiguration vermieden werden, und dies wäre für jede einzelne Anfrage. Dies bedeutet auch, dass ich eine spezielle separate Konfiguration für die Integritätsprüfung einrichten muss ( wie hier beschrieben : "... wenn Sie sich hinter einer ELB befinden, wobei die ELB als HTTPS-Endpunkt fungiert und nur HTTP-Datenverkehr an Ihren Server sendet, Sie brechen Sie die Fähigkeit, mit einer HTTP 200 OK-Antwort auf die Integritätsprüfung zu antworten, die der ELB benötigt ").
Ich denke darüber nach, den Login in den Code der Webanwendung und nicht in die Nginx-Konfiguration zu schreiben (und für die Zwecke dieser Frage nehmen wir an, dass es sich um eine Django-basierte Anwendung handelt), aber ich bin nicht sicher, ob dies mehr Aufwand bedeutet als die if
in Konfiguration.