開發與維運

解碼Nginx如何快速實現HSTS跳轉

什麼是HSTS
HSTS是國際互聯網工程組織 IETF 正在推行一種新的Web安全協議,網站採用HSTS後,用戶訪問時無需手動在地址欄中輸入 HTTPS,瀏覽器會自動採用 HTTPS 訪問網站地址,從而保證用戶始終訪問到網站的加密鏈接,保護數據傳輸安全。

瀏覽器版本支持
Chromium和Google Chrome從4.0.211.0版本開始支持HSTS

Firefox 4及以上版本

Opera 12及以上版本

Safari從OS X Mavericks起

Internet Explorer從Windows 10技術預覽版開始支持,之後微軟又向IE11用戶推送了支持HSTS的更新。

HSTS的優點和缺點

優點:

  • 比傳統的302重定向更加安全,不會被劫持;
  • 對訪問速度有提示,302 跳轉需要一個 RTT消耗,瀏覽器執行跳轉也需要時間。

缺點

  • 用戶首次訪問某網站是不受HSTS保護的。這是因為首次訪問時,瀏覽器還未收到HSTS,所以仍有可能通過明文HTTP來訪問。
  • HSTS會在一定時間段後失效,需要手動設置緩存期。

操作步驟

server {
    listen 80 ;
    server_name www.itrus.cn;

    # 避免首次訪問不跳轉的情況,使用301重定向進行跳轉
    return 301 https://$host;

}

server {
    listen 443 ssl;
    server_name www.itrus.cn;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    location /servlet {
        add_header X-Served-By "My Servlet Handler";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        proxy_pass http://localhost:8080;
    }

}

配置修改完成後,需要重啟nginx服務規則才會生效。

註釋:

可選的參數:includeSubDomains 設置該策略適用於當前域下的所有子域
參數:max-age=31536000 設置該策略緩存時間為31536000秒(1年)
一旦設置啟動HSTS策略,功能會在由max-age指定緩衝期中持續生效。在此期間,瀏覽器將會拒絕通過以HTTP訪問web服務,並同時拒絕證書錯誤的例外選項。*

302重定向設置方式

如果暫時繼續使用302方式進行重定向跳轉,請參考以下代碼在http站點配置中添加。

server { 
        listen 80; 
        server_name www.itrus.cn; 
        rewrite ^(.*)$ https://$host$1 permanent; 
}

或者

       if ($scheme = http) {
        return   301 https://$host$request_uri;
    }

Leave a Reply

Your email address will not be published. Required fields are marked *