Nginx
Nginx 中的 HSTS:是否也應該在子域伺服器塊中添加 Strict-Transport-Security 標頭?
讓我們使用以下
nginx.conf
配置文件,其中包含和server
塊:example.com``subdomain.example.com
http { ... server { listen [::]:80 ipv6only=off default_server; server_name example.com; return 301 https://example.com$request_uri; } server { listen [::]:443 ipv6only=off ssl default_server; server_name example.com; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; ... } server { listen [::]:80 ipv6only=off; server_name subdomain.example.com; return 301 https://subdomain.example.com$request_uri; } server { listen [::]:443 ipv6only=off ssl; server_name subdomain.example.com; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # <-- again ??? ... } }
標頭的
includeSubDomains
部分顯然告訴瀏覽器標頭也適用於所有子域。但是,如果該瀏覽器在看到之前就訪問
subdomain.example.com
過example.com
,那也沒有任何幫助,不是嗎?因此,為了涵蓋這種情況,我也需要add_header
在所有子域伺服器塊中添加相同的內容……對嗎?
您是正確的,最好
Strict-Transport-Security
在您需要的任何地方都有 HSTS 標頭,以確保客戶端即使在sub.example.com
之前訪問過它example.com
或記憶體的 HSTS 資訊已過期也能獲得它。該
includeSubDomains
標誌會影響它所在的所有子域。這意味著includeSubDomains
onsub.example.com
生效*.sub.example.com
而不是*.example.com
。example.co.uk
(這是很自然的,因為如果 eg會影響,那就不好了*.co.uk
。)
- 如果您不使用任何
sub.sub.example.com
內容,則可以在沒有此標誌的情況下保留Strict-Transport-Security
子域的標題。subA.example.com
無法保護subB.example.com
。