介紹#
首先了解 HSTS 是什麼。
簡單說就是返回一個響應頭,告訴瀏覽器這個域名和所有的子域名,以後都強制使用 https 進行訪問,這樣網站的應用程序就不需要再做重定向工作,並且也會更安全。
includeSubDomains#
需要注意的是,如果添加了 includeSubDomains
指令,那麼 HSTS 規則將會應用到所有的子域名,比如在 example.com
中添加了該指令,那麼以下子域都會應用該 HSTS 規則:
- example.com
- example.com:* 任意端口
- *.example.com
- *.example.com:* 任意端口
在 nginx 中配置#
server {
..
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains=false;" always;
..
}
includeSubDomains=false
代表不應用規則到子域名。
禁止應用到子域名#
如果只是想配置當前指定的域名,不想影響子域名,那麼可以添加為:
includeSubDomains=false;
清除已經應用到瀏覽器的 HSTS 規則#
如果配置了錯誤的 HSTS 規則,並且已經應用到瀏覽器,那麼有兩種方式可以解決:
- 清除瀏覽器所有的緩存
- 添加以下代碼使其立即失效,添加後重新啟動 nginx:
nginx -s reload
,然後再次訪問瀏覽器,訪問之後,之前設置的 HSTS 就會失效:add_header Strict-Transport-Security "max-age=0" always;