跳转到主内容
极星编程网:以代码为星,赴技术山海!

Nginx中server块配置HSTS提升网站安全等级

HSTS 是通过响应头强制浏览器仅用 HTTPS 访问域名的安全机制,需在 Nginx 的 HTTPS server 块中配置 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;,严禁在 HTTP server 中设置,且需确保所有子域支持 HTTPS 并先小范围测试。 在 Nginx 中为网站启用 HSTS(HTTP Strict Transport Security),只需在
server
块中添加一条响应头即可,但配置不当可能引发访问异常,需特别注意生效范围与缓存策略。 什么是 HSTS 及其作用 HSTS 是一种安全策略机制,通过响应头告诉浏览器:“未来一段时间内,只允许通过 HTTPS 访问此域名”。它能有效防止 SSL 剥离攻击、HTTPS 降级攻击,避免用户误点 HTTP 链接导致明文传输。 一旦浏览器收到有效的 HSTS 头,就会自动将后续对该域名的 HTTP 请求转为 HTTPS,且该策略会被浏览器缓存,无需每次请求都校验。 基础配置方式(推荐) 在 Nginx 的
server
块(尤其是监听 443 端口的 HTTPS server)中添加如下指令: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; 说明: max-age=31536000 :表示 HSTS 策略有效期为 1 年(单位秒),建议至少设为 31536000(1 年)以获得稳定保护 includeSubDomains :让策略对所有子域名也生效(如
api.example.com
、
www.example.com
),启用前请确保所有子域均支持 HTTPS preload :表示希望被加入浏览器 HSTS 预加载列表(需额外提交到 hstspreload.org ),启用后不可轻易撤回 always :确保即使返回 3xx、4xx、5xx 状态码时也发送该头(避免因错误响应丢失策略) 必须避开的常见错误 HSTS 配置看似简单,但以下几点极易出错: 不要在 HTTP server(80 端口)中设置 HSTS 头——浏览器会忽略非 HTTPS 响应中的 Strict-Transport-Security 不要在未启用 HTTPS 的站点上开启
includeSubDomains
,否则子域名若无 HTTPS 将彻底无法访问 首次上线建议先用较小的
max-age
(如 300 秒)测试,确认全站 HTTPS 稳定后再延长 若使用 CDN(如 Cloudflare),需确认 CDN 是否透传或覆盖了该 Header;部分 CDN 默认不透传自定义 Header,需单独开启 验证是否生效 配置完成后重启 Nginx(
nginx -t && nginx -s reload
),然后通过以下方式验证: 访问网站,在浏览器开发者工具的 Network → Response Headers 中查找
Strict-Transport-Security
使用在线检测工具,如 securityheaders.com 或 hstspreload.org 在 Chrome 地址栏输入
chrome://net-internals/#hsts
,查询域名是否已记录 HSTS 策略

相关文章