Strict-Transport-Security 头怎么配置才生效?

Newb.克培 阅读 52

我在 Nginx 里加了 Strict-Transport-Security 响应头,但浏览器好像没识别,是不是我写法有问题?

试过这样配:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

但用 curl 看响应头里没有这个字段,是漏了什么吗?

我来解答 赞 8 收藏
二维码
手机扫码查看
1 条解答
设计师柚溪
你的配置写法本身没问题,但 curl 看不到可能有几个原因:

第一个常见问题是配置位置。add_header 只能继承自上级作用域,如果你把它放在 location 块而不是 server 块里,而且 location 里还有其他 add_header,可能会被覆盖。最好直接放在 server 块里。

第二个可能是你的 Nginx 版本比较老。旧版 Nginx 对 add_header 的处理有些坑,比如在 if 条件里可能不生效。

第三个,也是最可能的——你用 curl 测的时候是不是测的 HTTP 而不是 HTTPS?HSTS 头只会出现在 HTTPS 响应里,HTTP 响应是不会有这个头的。

你可以先确认一下是不是 HTTPS 的 server 块里配的,然后这样测:

curl -k -I https://你的域名/


参数说明一下:-k 忽略证书验证,-I 只看响应头。

如果还是不行,贴一下你的 server 块配置看看,我帮你排查一下具体哪里的问题。
点赞
2026-03-16 17:03