我已經使用以下設定設定了我的伺服器:
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,並且所有其他文件都在沒有它的情況下提供服務?
答案1
從 nginx 0.7.14 開始,您可以為 http 和 https 服務建立緊湊的配置,而無需拆分為單獨的伺服器 {} 區塊:
listen 80;
listen 443 ssl;
# rest ssl configuration...
如果您想保護多個位置 - 只需檢查方案並使用“返回”或“重寫”進行重定向:
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 的區塊。