生产环境配置hsts必须分阶段验证:先设max-age=300测试2–3天,再升至2592000保持7天,最后设31536000+includesubdomains+preload并提交预加载审核,且仅在https虚拟主机中用header always set配置,确保全站https稳定、无混合内容、代理层同步设置。

生产环境配置 HSTS 不能直接上线“一步到位”,必须分阶段验证、确保全站 HTTPS 稳定可用,否则可能造成子域名不可访问或用户被永久锁定在 HTTPS 而无法回退。
确认前置条件已完备
确保以下三项全部满足,再动 HSTS 配置:
- 主站及所有子域名(如 www、api、shop、dev 等)均已部署有效 TLS 证书,并能稳定响应 443 端口 的 HTTPS 请求
- Apache 已启用
mod_headers和mod_ssl模块(执行apachectl -M | grep -E 'headers|ssl'应有输出) - 网站无任何 HTTP 资源引用(图片、JS、CSS、iframe)、无混合内容警告;所有重定向(包括 301/302)均指向 HTTPS 地址
仅在 HTTPS 虚拟主机中配置
HSTS 头只对 HTTPS 响应生效,绝对不能写在 <virtualhost></virtualhost> 块里。正确位置是:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 找到你的 SSL 虚拟主机配置(通常在
/etc/apache2/sites-available/或/etc/httpd/conf.d/下) - 在
<virtualhost></virtualhost>内、SSLEngine on之后添加:
分阶段上线策略
跳过测试直接设为 1 年 + preload 是高风险操作。推荐三步走:
-
第一阶段(观察期):用
max-age=300(5 分钟),持续运行 2–3 天,检查浏览器开发者工具 Network 标签页是否稳定出现该头,同时监控所有子域名是否可正常访问 -
第二阶段(过渡期):升级为
max-age=2592000(30 天),确认无异常后保持至少 7 天 -
第三阶段(生产态):设为
"max-age=31536000; includeSubDomains; preload",并提交至 hstspreload.org 审核
避免常见失效原因
即使配置了,HSTS 也可能不生效。排查重点:
- Apache 配置未重载:执行
sudo systemctl reload apache2(Debian/Ubuntu)或sudo apachectl graceful(RHEL/CentOS),不是 restart - 反向代理(Nginx、CDN、WAF)覆盖了响应头——需在代理层同步设置相同 HSTS 头
- 响应状态码非 2xx(如某路径返回 301 但没带 HSTS)——HSTS 只在 2xx 响应中被浏览器接受
- 使用了
Header set而非Header always set,导致错误页(4xx/5xx)不携带该头,影响强制策略可靠性










