Nginx

Nginx 中的 HSTS:是否也應該在子域伺服器塊中添加 Strict-Transport-Security 標頭?

  • May 27, 2018

讓我們使用以下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.comexample.com,那也沒有任何幫助,不是嗎?因此,為了涵蓋這種情況,我也需要add_header在所有子域伺服器塊中添加相同的內容……對嗎?

您是正確的,最好Strict-Transport-Security在您需要的任何地方都有 HSTS 標頭,以確保客戶端即使在sub.example.com之前訪問過它example.com或記憶體的 HSTS 資訊已過期也能獲得它。

includeSubDomains標誌會影響它所在的所有子域。這意味著includeSubDomainsonsub.example.com生效*.sub.example.com而不是*.example.comexample.co.uk(這是很自然的,因為如果 eg會影響,那就不好了*.co.uk。)

  • 如果您不使用任何sub.sub.example.com內容,則可以在沒有此標誌的情況下保留Strict-Transport-Security子域的標題。
  • subA.example.com無法保護subB.example.com

引用自:https://serverfault.com/questions/913962