如何設定 Nginx 對單一網站上的不同 url 使用 ssl/非 ssl,但如果使用者在瀏覽器網址列中明確鍵入 https,則始終使用 ssl?

如何設定 Nginx 對單一網站上的不同 url 使用 ssl/非 ssl,但如果使用者在瀏覽器網址列中明確鍵入 https,則始終使用 ssl?

我的電流nginx.conf看起來像這樣:

server {
    listen      80;
    server_name www.example.com;

    root /var/www/;
    location / {
    }
    location /users {
        rewrite ^ https://$http_host$request_uri? permanent;
    }
}

server {
    listen      443 ssl;
    server_name www.example.com;

    root /var/www/;
    location /users {
    }
    location / {
        rewrite ^ http://$http_host$request_uri? permanent;
    }
}

透過此配置,當使用者導航網站上的頁面時,連線會在 ssl/非 ssl 之間切換,以 ssl 開頭的 url 為 ssl,/users而對於所有其他 url 則為非 ssl。因此,即使使用者https://www.example.com/在瀏覽器的網址列中明確鍵入,結果頁面也會重定向到http://www.example.com/.

有沒有一種方法可以實現 ssl/非 ssl 之間的自動 url 重寫,如上述設定所實現的那樣,但如果https://用戶在瀏覽器的地址列中明確鍵入,則仍然尊重顯式 ssl 請求?

答案1

從伺服器的角度來看,沒有辦法區分點擊連結、抓取網站或在網址列中鍵入完整位址所發出的請求。

當您輸入位址時,Web 瀏覽器會向您的 Web 伺服器發送 HTTP 請求。如果您輸入 https,它將嘗試連接到連接埠 443(預設),並且如果使用者輸入了請求或請求,或者例如機器人抓取了它,則請求標頭不會包含資訊。

您所能做的就是為某些用戶代理保留 SSL,並為其他用戶代理保留重定向。

相關內容