告诉 nginx 对特定的 PHP 文档进行 SSL 加密

告诉 nginx 对特定的 PHP 文档进行 SSL 加密

我已经使用以下设置设置了我的服务器:

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 的块中。

相关内容