欢迎光临
我们一直在努力

网站开启HSTS的作用与配置方法

网站已经配置好 SSL 证书,CDN 或服务器面板里往往还会提供一个 HSTS 开关。

开启之后有什么变化?为什么有的网站关闭了这个选项,浏览器仍然自动访问 HTTPS?为什么主站正常,某些子域名却打不开?

这些问题与 HSTS 的生效范围和有效期有关。本文介绍它的作用、配置方法,以及上线和回退时需要检查的内容。

1. HSTS 有什么作用

HSTS 的全称是 HTTP Strict Transport Security,即 HTTP 严格传输安全。

网站通过 HTTPS 响应中的 Strict-Transport-Security 字段,告诉浏览器:在指定时间内,访问这个域名必须使用 HTTPS。

浏览器记住策略后,即使用户点击 HTTP 链接,也会先将地址升级为 HTTPS。遇到证书错误时,也不会提供普通的忽略警告继续访问选项。

它与网站的 HTTP 跳转配置作用不同:

配置主要作用
HTTPS为网站提供加密连接
HTTP → HTTPS 跳转服务器收到 HTTP 请求后,通知客户端访问 HTTPS
HSTS浏览器已有有效策略时,在发出 HTTP 请求之前升级地址

因此,HSTS 适合已经能够稳定提供 HTTPS 的网站。它不能代替证书安装、续期和网站本身的安全维护。

2. 先看懂三个常见参数

下面是一条用于短期测试的响应头:

Strict-Transport-Security: max-age=300

其中,300 的单位是秒,表示浏览器记住策略的时间为 5 分钟。

常见参数如下:

参数含义
max-age浏览器保存策略的有效期,单位为秒
includeSubDomains将策略扩展到当前域名的所有下级子域名
preload与浏览器预加载名单相关,并不是普通 HSTS 必须添加的参数

例如,在 example.com 上启用 includeSubDomains,会影响 www.example.com、api.example.com 等子域名;只在 www.example.com 设置策略,不会反向覆盖 example.com。

初次配置时,可以先针对已经验证好的域名使用较短的 max-age,确认业务正常后逐步延长。

不要直接复制带有一年有效期、includeSubDomains 和 preload 的配置。预加载需要长期维护整个域名体系的 HTTPS,退出名单也不是即时生效。

3. 开启前检查 HTTPS 和子域名

建议先检查以下项目:

检查项目需要确认的内容
在线证书证书未过期,域名匹配,证书链正常
页面功能登录、上传、支付和接口请求能够正常完成
子域名后台、下载站、API 和旧站点是否支持 HTTPS
CDN 入口用户实际访问的节点使用有效证书
后续维护证书续期、域名迁移和故障处理有人负责

如果使用 CDN,不能只检查源站证书。用户浏览器实际连接的是 CDN 节点,节点上的证书和 HTTPS 配置同样需要正常。开启 HSTS 后,也应避免把访问入口切换到无法提供有效 HTTPS 的服务器。

旧管理入口还需要特别留意。例如:

http://panel.example.com:8080

当该域名被有效的 HSTS 策略覆盖时,浏览器会尝试:

https://panel.example.com:8080

这里的 8080 不会自动变成 443。如果该端口只提供 HTTP,访问就可能失败。

如果遇到证书已经更换,但访问时仍显示旧证书的情况,可以先参考本站的 SSL证书更新后仍显示旧证书排查教程。

先把 HTTPS 问题解决,再开启 HSTS。

开启HSTS前检查HTTPS证书与子域名

4. Nginx 和 CDN 如何配置 HSTS

4.1 在 Nginx 中添加响应头

以下操作以已经能够正常访问 HTTPS 的 Nginx 网站为前提。

打开当前域名对应的 HTTPS server 配置,在其中添加:

add_header Strict-Transport-Security "max-age=300" always;

如果已经存在同名配置,应修改原来的配置,避免重复添加。

这里先使用 5 分钟有效期,并且不添加 includeSubDomains 和 preload,便于验证当前域名的实际影响。

always 用于让响应头不受常规状态码范围的限制。还要注意 Nginx 的默认继承规则:某个 location 自己配置了 add_header 时,可能不会继承上层的 HSTS 配置。新增配置时,也要保留原来需要继承的其他响应头。

对于通过系统服务管理的 Nginx,保存后执行:

sudo nginx -t && sudo systemctl reload nginx

只有配置检查成功,才会执行重载。

如果使用面板或容器管理 Nginx,应通过对应实例的配置检查和重载方式操作,避免修改的配置与实际运行的服务不是同一个。

4.2 逐步延长有效期

测试阶段应检查实际业务页面,而不只是确认首页能打开。

例如:

  • 用户能否正常登录。
  • 文件上传和下载是否正常。
  • 页面调用的接口是否正常。
  • 旧链接和管理入口是否仍可使用。

确认业务稳定后,再分阶段延长 max-age,并留出完整的观察期。短期测试值适合验证配置,不应一直作为正式部署的最终方案。

4.3 使用 CDN 时怎么处理

如果 CDN 控制台提供 HSTS 设置,可以在对应域名的 HTTPS 或安全配置中管理。

重点核对:

  • 实际生效的是哪个域名。
  • max-age 的单位和可选范围。
  • 是否开启了对子域名的覆盖。
  • 是否额外启用了预加载相关选项。

不同面板支持的有效期范围不一样,不一定能直接填写 300。

建议明确由哪一层负责输出 HSTS 响应头,避免 CDN、源站和应用分别添加不同的值。最终应检查公网域名实际返回的响应,而不是只看控制台开关。

5. 如何检查 HSTS 是否配置成功

在 Linux 终端执行以下命令,将示例域名替换为自己的域名:

curl -sS --max-time 20 -D - -o /dev/null \
  https://www.example.com/

命令会显示响应头,并丢弃页面正文。检查结果中是否包含:

Strict-Transport-Security: max-age=300

响应头名称不区分大小写,显示为小写也正常。

验证时不要添加 -k。该选项会跳过证书校验,不适合用来确认 HTTPS 是否已经正确部署。

还应检查以下情况:

  1. 如果返回跳转,根据 Location 检查目标地址,并分别核对入口和最终页面。
  2. 分别检查首页、登录页和主要业务路径。
  3. 使用 CDN 时,确认检查的是实际对外域名。
  4. 确认没有重复或相互冲突的 HSTS 响应头。

看到响应头,能够证明这次响应携带了策略;仅仅看到浏览器自动跳转 HTTPS,并不能单独证明 HSTS 配置成功,因为网站本身也可能设置了跳转规则。

6. 为什么关闭 HSTS 后仍然跳转 HTTPS

HSTS 策略会保存在浏览器中。

直接从服务器配置中删除响应头,并不会通知浏览器立即删除以前保存的策略。此前的有效期尚未结束时,浏览器仍可能继续强制使用 HTTPS。

而且,每次收到新的有效 HSTS 响应头,浏览器都会更新策略的到期时间,并不是从第一次开启时固定倒计时。

需要撤销当前域名的动态策略时,可以将原配置改为:

add_header Strict-Transport-Security "max-age=0" always;

检查并重载后,确认 HTTPS 响应包含:

Strict-Transport-Security: max-age=0

浏览器需要再次成功通过 HTTPS 访问,并收到这个响应头,才能处理撤销。没有再次访问的客户端,不会凭空收到服务器的配置变化。

另外还要区分两种情况:

  • 受到父域名策略覆盖: 子域名发送 max-age=0,不能取消父域名仍然有效的 includeSubDomains 策略。
  • 已经进入预加载名单: 删除 preload 或修改响应头,不等于立即从用户浏览器内置的名单中移除。

回退期间应继续提供有效的 HTTPS,不要在删除配置后立即撤掉证书或关闭 HTTPS 服务。

关闭HSTS后浏览器策略仍可能有效

7. 上线后还需要维护什么

HSTS 开启后,建议把以下事项纳入日常维护:

  • 检查证书续期是否正常。
  • 监测 HTTPS 网站的可用性。
  • 新增子域名时,确认是否受到父域名策略覆盖。
  • 更换 CDN 或迁移服务器前,验证新入口的证书和业务功能。
  • 保存当前策略值,方便后续排查和调整。

需要搭建网站监控,可以参考本站的 Docker搭建Uptime Kuma网站监控教程。

如果需要单独验证 Nginx 配置或网站迁移方案,可以准备一台莱卡云 Linux 云服务器作为测试环境,完成验证后再调整正式站点。

查看官网购买链接: https://www.lcayun.com

9折优惠码:bloglcayun

8. 结语

HSTS 能让浏览器在策略有效期间坚持使用 HTTPS,适合已经完成 HTTPS 部署并能持续维护证书的网站。

实际配置时,先确认在线证书和业务功能,再检查子域名范围,从较短的有效期开始验证。配置完成后检查真实响应头,后续迁移或关闭功能时,也要考虑浏览器中已经保存的策略。

把生效范围、有效期和维护安排弄清楚,才能让 HSTS 在增强访问安全的同时,保持网站稳定运行。

赞(0)
未经允许不得转载:莱卡云 » 网站开启HSTS的作用与配置方法