Wie richte ich die Nginx-Conf-Datei so ein, dass nur einer der Pfade auf meiner Site SSL und der Rest Nicht-SSL erzwungen wird?
Ich möchte zum Beispiel, dass alle URLs unter / user https lauten und alle anderen URLs http lauten.
Für den ersten Teil habe ich:
rewrite ^/user(.*) https://$http_host$request_uri?;
Ich möchte nicht "if" verwenden. Ich nehme an, es würde die Reihenfolge der Operationen ausnutzen, aber ich möchte nicht in eine Schleife geraten.
/user
und non-ssl für alle anderen URLs beginnen. Selbst wenn der Benutzerhttps://www.example.com/
die Adresszeile des Browsers explizit eingibt, wird die resultierende Seite angezeigthttp://www.example.com/
. Gibt es eine Möglichkeit, das automatische Url-Umschreiben zwischen ssl / non-ssl zu implementieren, wie es durch die in dieser Antwort beschriebenen Einstellungen erreicht wird, aber trotzdem die explizite ssl-Anforderung zu respektieren, wenn sie vom Benutzer explizit in die Adressleiste eingegeben wird? Vielen Dank!Nginx ermöglicht die Verarbeitung von HTTP und HTTPS innerhalb desselben
server
Blocks. Sie müssen also keine Anweisungen für beide duplizieren und können den Pfad, den Sie sichern möchten, umleitenAchten Sie darauf , nicht zu setzen
ssl on
dort Linie , weil es wird schlicht HTTP brechen.Optional können Sie alle anderen Anforderungen von HTTPS auf dieselbe Weise zurück an HTTP umleiten:
UPDATE : Wie Alexey Ten freundlicherweise in den Kommentaren ausführt,
scheme
ist es keine besonders gute Idee , jede Anfrage zu prüfen . Sie sollten die deklarative Methode zur Konfiguration Ihres Nginx befolgen. In diesem Fall deklarieren Sie zwei Serverblöcke mit Weiterleitungen vonlocation
, verschieben Sie die gemeinsame Logik in eine separate Datei undinclude
in beide. Die Antwort von GruffTech ist also besser.quelle
include
Direktive für allgemeine Direktiven. Einige Wiederholungen sind in Ordnung.