我已经使用以下设置设置了我的服务器:
server { server_name www.example.com listen 443; listen 80; location /login\.php { rewrite ^(.*) https://www.example.com/login.php$1 last; } .. other settings }
但是,使用此设置我收到一个redirect错误(太多的redirect)。 有没有办法告诉nginx,如果我有文件login.php,我想要SSL和所有其他文件没有它的服务?
由于nginx 0.7.14,你可以为http和https服务创build紧凑的configuration,而不需要分割成单独的服务器{} bocks:
listen 80; listen 443 ssl; # rest ssl configuration...
如果你想保护多个地点 – 只需检查sсheme,然后用“return”或“rewrite”redirect:
location = /login.php { if($scheme = "http") { rewrite ^ https://$host$request_uri? permanent; } ... }
您可以(查看其他答案),但是encryption所有内容通常是一个更好的主意 – 安全地传输用户名和密码,然后以纯文本forms给他们一个完整账户访问cookie几乎与不encryption一样危险。
作为一个例子,它是多么危险,请参阅这里的一个程序,它通过利用这个错误自动拥有twitter / facebook / google / etc用户 – > http://codebutler.com/firesheep
把listen 80; listen 443; 在单独的server块中。
SSLconfiguration (我认为是在你的“其他设置”)应该只在正在侦听端口443的server块中进行。