nginx 不校验 hsts 头名拼写,真正报错的是 add_header 指令语法、位置或周边配置错误;需检查指令拼写、空格、作用域(仅 http/server/location)、响应值格式及隐藏字符。

HSTS 响应头本身没有“拼写错误”这一说法——Strict-Transport-Security 是标准 HTTP 响应头名称,Nginx 不校验这个字符串是否拼错;真正会报错的,是 add_header 指令本身的语法或上下文使用问题,而非头名写成 “Strict-Transport-Securty” 这类笔误(Nginx 会照常下发,浏览器才拒绝识别)。
确认 add_header 指令是否写对了
这是最常被当成“HSTS 拼写错误”的真实根源。Nginx 对 add_header 指令本身大小写敏感、不可缩写、不可漏字:
-
add_header不能写成add_header_、add-hearder或addheader - 指令后必须紧跟空格,再跟响应头名,例如:
add_header Strict-Transport-Security ...—— 中间不能多空格、少空格,也不能用中文空格(\u3000) - 头名
Strict-Transport-Security写错(如少个-或字母)Nginx 不报错,但浏览器不认;你得靠curl -I查看实际返回值来发现
检查 add_header 所在位置是否合法
Nginx 只允许在特定块中使用 add_header,写错位置会直接触发 nginx -t 报错,提示 "directive is not allowed here":
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- ✅ 允许:http、server、location 块内
- ❌ 禁止:events 块、stream 块、全局配置区(http 外)、注释行中间、未闭合的花括号内
- 常见误配:把 HSTS 行粘贴进
events { }或upstream { }里,Nginx 立即拒绝加载
验证响应头是否真实发出且格式正确
即使配置无语法错误,HSTS 也可能因格式问题失效(浏览器忽略):
- 执行
curl -I https://your-domain.com,检查响应头中是否含Strict-Transport-Security:,且值符合规范(如max-age=31536000; includeSubDomains) - 注意引号必须是英文半角双引号或不加引号(Nginx 允许),不能用中文引号、单引号包裹整个值
- 分号必须是英文半角,且每个参数后都要有空格+分号,结尾无需分号(
max-age=31536000;✅,max-age=31536000;;❌) - 若值中混入不可见字符(如从网页复制带来的 \u200b、\u3000),可用
curl -I ... | hexdump -C查看原始字节
排除其他干扰项
所谓“HSTS 拼写问题”,有时其实是周边配置污染所致:
- 上一行配置漏了分号(如
ssl_certificate /path.crt少分号),导致 Nginx 解析器把 HSTS 行吞进前一条指令,报错行号偏移 - include 的子配置文件中存在语法错误,而 HSTS 行恰在该文件末尾,
nginx -t报错指向它,实为上游问题 - 使用了
if判断或error_page重定向,使部分路径(如 404、302)未执行到 add_header,造成“有时有、有时无”










