Ich verwende einen Rackspace-Load-Balancer, mit dem ich meinen SSL-Schlüssel / PEM im Admin-Bereich einrichten kann. Alles funktioniert gut, ich kann sowohl http- als auch https-Protokolle verwenden. Aber wenn ich versuche, http zu https umzuleiten, indem ich:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... Ich bekomme eine Umleitungsschleife. Mir ist klar, dass ich nicht auf Port 443 höre, aber das liegt daran, dass der Load Balancer das für mich erledigt hat. Ich habe auch versucht, das Umschreiben if ($scheme ~* http){
ohne Erfolg einzupacken.
Der andere Teil meiner Frage ist, dass ich www aus der URL entfernen möchte. Kann ich dies mit einem einzigen Umschreiben tun? Sollte das obige Umschreiben nicht auch dafür sorgen?
Danke für Ihre Hilfe!
nginx
load-balancing
jwerre
quelle
quelle
Antworten:
sciurus ist insofern richtig, als die Cloud Load Balancers von Rackspace den X-Forwarded-Proto auf https setzen, wenn SSL am Load Balancer entladen wird. Um eine Umleitungsschleife in Nginx zu vermeiden, sollten Sie in der Lage sein, dem
location
Abschnitt in der vhost-Konfiguration Folgendes hinzuzufügen:Dies sollte die Endlosumleitungsschleife vermeiden, während Nicht-https-Anforderungen an https umgeleitet werden.
quelle
Durch die Verwendung von nginx ist integrierte Servervariablen
$request_uri
und$server_name
Sie können dies tun , ohne reguläre Ausdrücke überhaupt verwendet wird . Fügen Sie demlocation
Block Ihres Servers Folgendes hinzu, und Sie sind fertig:Dies setzt voraus, dass Ihr Load Balancer den
$http_x_forwarded_proto
Header zusammen mit der Anforderung an Ihre Backend-Instanz (en) sendet . Andere gebräuchliche Überschriften sind$http_x_forwarded_scheme
und auch nur$scheme
.Weitere Informationen finden Sie in der Dokumentation zu Nginx- Fallstricken und häufigen Fehlern : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
quelle
$host
anstelle von$server_name
Der Load Balancer spricht immer über http mit Ihnen. Was passiert ist
Die Schritte 2 bis 4 werden so oft wiederholt, bis der Browser die Umleitungsschleife erkennt und aufgibt.
BEARBEITEN: Um dies zu beheben, führen Sie das Umschreiben nur durch, wenn der X-Forwarded-Proto-Header auf http gesetzt ist. In diesem Header teilt der Load Balancer von Rackspace Ihrem Webserver das Protokoll mit, über das er die Anforderung empfangen hat.
quelle