配置HSTS的前提是网站已部署有效SSL证书并稳定运行HTTPS;需在HTTPS响应头中添加Strict-Transport-Security字段,Apache用mod_headers模块,Nginx需在443 server块中加add_header且带always参数;max-age建议先设300秒测试,includeSubDomains和preload须谨慎启用。

配置 HSTS 的前提是网站已部署有效的 SSL 证书并能正常通过 HTTPS 访问。HSTS 不是独立安装的组件,而是通过服务器响应头告诉浏览器“只许走 HTTPS”,必须在 HTTPS 已启用的前提下生效。
确认 HTTPS 已稳定运行
HSTS 只对 HTTPS 响应有效,HTTP 响应中设置 Strict-Transport-Security 头会被浏览器直接忽略。因此务必先确保:
- SSL 证书已正确安装,443 端口可访问,无证书警告
- 所有页面资源(CSS、JS、图片)都使用相对协议或 HTTPS URL,避免混合内容报错
- HTTP 请求已重定向到 HTTPS(如 Nginx 的 301 跳转或 Apache 的 mod_rewrite 规则)
在服务器配置中添加 HSTS 响应头
根据你使用的 Web 服务器,选择对应方式注入 Strict-Transport-Security 头:
-
Apache(.htaccess 或虚拟主机配置):需启用 mod_headers 模块,加入以下代码
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule> -
Nginx(server 块内):在 listen 443 ssl 的 server 配置中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 注意**:不要在 HTTP server 块中加该头,否则无效;且必须带
always参数(Nginx)或always标志(Apache),否则重定向响应可能不携带此头
理解并谨慎设置 HSTS 参数
常见参数含义与实操建议:
- max-age=31536000:浏览器记住该策略 1 年(单位为秒)。首次上线建议先设为 300(5 分钟)测试,确认无误后再逐步延长
- includeSubDomains:启用后,所有子域名(如 api.example.com、blog.example.com)也强制 HTTPS。若子域名尚未支持 HTTPS,请勿开启
- preload:表示申请加入浏览器内置 HSTS 预加载列表(如 Chrome、Firefox)。加入后无法撤回,仅在全站长期稳定 HTTPS 且含 includeSubDomains 时启用
验证与后续动作
配置生效后,用浏览器开发者工具(Network → Headers)检查任意 HTTPS 页面响应头,确认出现:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
再访问 http://yourdomain.com,观察是否自动跳转至 HTTPS,且地址栏未出现“不安全”提示。如需提交预加载,访问 hstspreload.org 提交审核。


















