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 server
bloque que está escuchando en el puerto 443.