Weisen Sie nginx an, bestimmte PHP-Dokumente per SSL zu verschlüsseln

Weisen Sie nginx an, bestimmte PHP-Dokumente per SSL zu verschlüsseln

Ich habe meinen Server mit folgenden Einstellungen eingerichtet:

server {
   server_name www.example.com
   listen 443;
   listen 80;

   location /login\.php
   {
   rewrite ^(.*) https://www.example.com/login.php$1 last;        
   }

   .. other settings
}

Bei dieser Konfiguration erhalte ich jedoch einen Umleitungsfehler (zu viele Umleitungen). Gibt es eine Möglichkeit, nginx mitzuteilen, dass ich SSL möchte, wenn ich die Datei login.php habe, und alle anderen Dateien ohne SSL bereitgestellt werden?

Antwort1

Seit Nginx 0.7.14 können Sie kompakte Konfigurationen für die Bereitstellung von HTTP und HTTPS erstellen, ohne diese in separate Server-{}-Blöcke aufzuteilen:

listen 80;
listen 443 ssl;

# rest ssl configuration...

Wenn Sie mehrere Standorte schützen möchten, aktivieren Sie einfach das Kontrollkästchen und leiten Sie die Weiterleitung mit „Return“ oder „Rewrite“ durch:

location = /login.php {

      if($scheme = "http") {
              rewrite ^ https://$host$request_uri? permanent;
      }

      ...
}

Antwort2

Das können Sie (siehe die andere Antwort), aber im Allgemeinen ist es eine bessere Idee, alles zu verschlüsseln – Benutzernamen und Passwort sicher zu übertragen und ihnen dann ein Cookie für den vollständigen Kontozugriff im Klartext zu geben, ist fast genauso gefährlich, wie überhaupt keine Verschlüsselung durchzuführen.

Ein Beispiel dafür, wie gefährlich das ist, finden Sie hier bei einem Programm, das diesen Fehler ausnutzt und automatisch Twitter-/Facebook-/Google-/usw.-Benutzer besitzt -->http://codebutler.com/firesheep

Antwort3

Setzen Sie listen 80;und listen 443;in separate serverBlöcke.

DerSSL-Konfiguration(von dem ich annehme, dass es sich in Ihren „… anderen Einstellungen“ befindet) sollte nur in den serverBlock gehen, der auf Port 443 lauscht.

verwandte Informationen