Nginx 配置 HSTS 教程

何为 HSTS?

HTTP严格传输安全协议(英语:HTTP Strict Transport Security,简称:HSTS),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。其征求修正意见书文件编号是RFC 6797,发布于2012年11月。

在开启了HSTS后,所有的资源都会以HTTPS方法加载,根治了“混合内容”,大大提高了网站的安全性,而且,当网站被劫持时(证书无效等错误),浏览器会在缓存内拒绝传输信息,确保网站绝对安全,对于不支持HTTPS的网站,开启HSTS会使网站无法访问。

HSTS请求头参数

max-age (必须)指定HSTS请求头的缓存时间
include-subdomains 同时应用到子域名
preload 允许预加载(本文章会详细讲预加载)

配置HSTS

如果想要为一个网站加入HSTS,应该在服务器上进行请求头的配置,添加类似如下请求头:

Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”

配置方法
打开Nginx配置(Phpstudy在“设置”,宝塔在Nginx-配置修改,原生请使用 nginx.conf 或者站点配置文件)
定位到HTTP块,加入
add_header Strict-Transport-Security $hsts_header;

定位到Server块上方,加入

1
2
3
map $scheme $hsts_header {
https "max-age=31536000; includeSubDomains; preload";
}

PS:上面给的 HSTS 标头参数可以自由更改
保存配置文件,重启 Nginx 即可

预加载

如果你的网站已经使用了HSTS,还想要提高速度并且变得更安全,那么预加载(Preload)对你来说非常有必要
预加载是一个网址列表,会硬编码到Chromium的源代码,其他的主流浏览器一般依据Chromium进行更新列表,目前大多数浏览器均支持本列表,包括Chrome、Firefox、Edge、IE11等浏览器,其他国产浏览器如360,列表随咕鸽而变化。在“Preload预加载列表中”的网址,只能通过HTTPS的方式访问,任何以HTTP的方式访问将会直接被浏览器跳转HTTPS,跳转失败则拒绝打开。

加入预加载的方法

打开这个网站:https://hstspreload.org
然后在网站中输入你的域名,回车


解决好图中的问题就可以了,其中黄色的问题解决不解决都行,但是红色的必须要解决,解决完全部的即可出现一个申请的按钮,点击即可申请啦,一般申请之后两三天就能通过,长的最多几周,申请通过的效果: