我已经使用以下设置设置了我的服务器:
server {
server_name www.example.com
listen 443;
listen 80;
location /login\.php
{
rewrite ^(.*) https://www.example.com/login.php$1 last;
}
.. other settings
}
但是,使用此设置时,我收到重定向错误(重定向次数过多)。有没有办法告诉 nginx,如果我有文件 login.php,我需要 SSL,而所有其他文件都没有 SSL,则无法提供服务?
答案1
从 nginx 0.7.14 开始,您可以为 http 和 https 服务创建紧凑的配置,而无需拆分为单独的服务器{}块:
listen 80;
listen 443 ssl;
# rest ssl configuration...
如果您想保护多个位置 - 只需检查方案并使用“return”或“rewrite”进行重定向:
location = /login.php {
if($scheme = "http") {
rewrite ^ https://$host$request_uri? permanent;
}
...
}
答案2
你可以(参见其他答案),但通常更好的想法是加密所有内容 - 安全地传输用户名和密码,然后以纯文本的形式向他们提供完整帐户访问 cookie,这几乎与根本不加密一样危险。
举个例子来说明它有多危险,这里有一个程序利用这个错误自动拥有了 twitter / facebook / google / 等用户 -->http://codebutler.com/firesheep
答案3
将listen 80;
和listen 443;
放在不同的server
块中。
这SSL 配置(我认为它在您的“...其他设置”中)应该只进入server
监听端口 443 的块中。