必须满足5项硬性前提:全站HTTPS重定向、有效TLS证书、HSTS头含max-age=31536000;includeSubDomains;preload且带always参数、所有子域合规、通过hstspreload.org检测。

要在 Linux Nginx 中配置 preload 参数,让域名正式申请加入浏览器 HSTS 预加载列表(如 Chrome 的 hstspreload.org),不能只加个 header 就完事——它是一份长期安全承诺,必须满足一整套硬性条件,且配置稍有遗漏就会审核失败。
必须先满足的 5 项硬性前提
preload 不是开关,而是向所有主流浏览器宣告:“我永远只走 HTTPS”。提交前务必确认以下全部成立:
- 主域名(如 example.com)和每一个子域(api.example.com、cdn.example.com、blog.example.com 等)都已部署有效 TLS 证书,且支持 TLS 1.2+,禁用弱加密套件(如 SSLv3、RC4、SHA1)
- 所有 HTTP 请求(
http://example.com、http://api.example.com)必须返回 301 永久重定向到对应 HTTPS 地址,不能返回任何明文内容(包括 404、500 页面) - 所有 HTTPS 响应(含错误页)的响应头中,Strict-Transport-Security 必须完整包含:
max-age=31536000; includeSubDomains; preload - add_header 指令必须带 always 参数,否则 4xx/5xx 响应不会携带 HSTS 头(Nginx 默认只给 2xx 响应加 header)
- 所有子域的 HTTPS 站点必须可正常访问、响应头合规,且能通过 hstspreload.org 的自动检测
Nginx 配置写法(关键细节)
在 HTTPS server 块内添加如下行(注意位置和参数):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
常见错误写法(会导致审核失败):
- 漏掉
always→ 错误页不带 HSTS 头 - 把该行写在 HTTP server 块里 → HTTPS 才生效,HTTP 块里加无效
- 只在主站配,子域 server 块没重复配置 → 子域响应头缺失 preload 或 includeSubDomains
- max-age 小于 31536000(即不足 1 年)→ 直接被拒绝
提交与验证流程
完成配置并重启 Nginx 后,按顺序操作:
- 用 curl 检查主站和每个子域的 HTTPS 响应头:
curl -I https://example.com和curl -I https://api.example.com,确认 HSTS 头完整出现 - 访问 https://www.php.cn/link/b9fcbc854cc45e5802618e283d3fe525,输入主域名(如 example.com),系统自动扫描全链路合规性
- 检测全部通过后点击 Submit,进入 Chromium 团队人工审核队列(通常需数天至两周)
- 审核通过后,域名将被加入 Chromium、Firefox、Safari 等浏览器的内置预加载列表,用户首次访问即强制 HTTPS
上线前强烈建议的渐进策略
为避免误配导致全站不可访问,推荐分阶段上线:
- 第一周:设
max-age=300(5 分钟),验证重定向、证书、header 是否全链路生效 - 第二周:升为
max-age=2592000(30 天),观察日志和监控是否异常 - 确认稳定后,再设为
max-age=31536000并加入preload提交
一旦 preload 成功加入列表,撤回需数月甚至更久,无法临时关闭。所以每一步都要测准再走下一步。

















