Dígale a nginx que cifre SSL documentos PHP específicos

Dígale a nginx que cifre SSL documentos PHP específicos

He configurado mi servidor con la siguiente configuración:

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

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

   .. other settings
}

Sin embargo, con esta configuración recibo un error de redireccionamiento (demasiados redireccionamientos). ¿Hay alguna manera de decirle a nginx que si tengo el archivo login.php quiero SSL y todos los demás archivos se entregan sin él?

Respuesta1

Desde nginx 0.7.14, puede crear una configuración compacta para el servicio http y https sin dividirse en bloques {} de servidor separados:

listen 80;
listen 443 ssl;

# rest ssl configuration...

Si desea proteger varias ubicaciones, simplemente marque el esquema y redirija con "return" o "rewrite":

location = /login.php {

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

      ...
}

Respuesta2

Puede (consulte la otra respuesta), pero generalmente es una mejor idea cifrar todo: transferir el nombre de usuario y la contraseña de forma segura y luego darles una cookie de acceso completo a la cuenta en texto plano es casi tan peligroso como no cifrar nada.

Como ejemplo de lo peligroso que es, vea aquí un programa que automáticamente posee a los usuarios de Twitter/Facebook/Google/etc aprovechando este error -->http://codebutler.com/firesheep

Respuesta3

Coloque listen 80;y listen 443;en bloques separados server.

Elconfiguración SSL(que supongo que está en "... otras configuraciones") solo debe ir en el serverbloque que está escuchando en el puerto 443.

información relacionada