介绍#
首先了解 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;