Eu configurei meu servidor com as seguintes configurações:
server {
server_name www.example.com
listen 443;
listen 80;
location /login\.php
{
rewrite ^(.*) https://www.example.com/login.php$1 last;
}
.. other settings
}
No entanto, com esta configuração recebo um erro de redirecionamento (muitos redirecionamentos). Existe uma maneira de dizer ao nginx que se eu tiver o arquivo login.php que desejo SSL e todos os outros arquivos serão servidos sem ele?
Responder1
Desde o nginx 0.7.14, você pode criar configurações compactas para veiculação http e https sem dividir em blocos {} de servidor separados:
listen 80;
listen 443 ssl;
# rest ssl configuration...
Se você deseja proteger vários locais - basta verificar o esquema e redirecionar com "return" ou "rewrite":
location = /login.php {
if($scheme = "http") {
rewrite ^ https://$host$request_uri? permanent;
}
...
}
Responder2
Você pode (veja a outra resposta), mas geralmente é uma idéia melhor criptografar tudo - transferir nome de usuário e senha com segurança e fornecer a eles um cookie de acesso completo à conta em texto simples é quase tão perigoso quanto não criptografar.
Como exemplo de quão perigoso é, veja aqui um programa que possui automaticamente usuários do Twitter/Facebook/Google/etc tirando vantagem desse erro -->http://codebutler.com/firesheep
Responder3
Coloque o listen 80;
e em blocos listen 443;
separados .server
OConfiguração SSL(que presumo que esteja em ".. outras configurações") só deve ir no server
bloco que está escutando na porta 443.