ignore_invalid_headers 主要用于控制Nginx对非法请求头名称的处理:on时跳过非法头继续处理,off时立即返回400;仅作用于请求头名称合规性检查(如禁止下划线、空格等),须在http块配置,默认on。

配置 ignore_invalid_headers 主要作用不是直接提升“安全性”,而是增强协议合规性与请求过滤能力——它让网关对非法命名的 HTTP Header 更敏感,从而避免因宽松解析导致的绕过风险(例如某些攻击利用下划线、空格或控制字符构造畸形头来干扰鉴权或路由逻辑)。
明确 ignore_invalid_headers 的行为边界
该指令控制网关是否拒绝携带非法 Header 名称的请求。所谓“非法”,指 Header 名不符合 RFC 7230 规范:只允许英文字母、数字、短划线(-),默认**不允许下划线(_)**。下划线是否被接受,由另一个独立开关 underscores_in_headers 决定(Nginx 中为 off,默认禁用;Envoy/ASM 网关中需显式启用)。
- 若
ignore_invalid_headers on(或等效开启),遇到非法 Header 名(如X-User_ID、X%20Cookie、Content-Length带尾部空格),网关直接返回 400 Bad Request,不进入后续处理流程 - 若关闭(默认常见),网关可能静默忽略、截断或错误解析该 Header,造成业务逻辑误判或安全策略失效
- 注意:它不校验 Header 值的内容,只校验名称格式
在 ASM 网关中启用 Header 校验
ASM(阿里云服务网格)底层使用 Envoy,其 Header 校验由 header_validator 控制。默认未配置时,行为等同于 ignore_invalid_headers off。
- 登录 ASM 控制台 → 进入目标网关实例 → 路由管理或全局配置页
- 查找“HTTP 连接管理”或“高级网络配置”相关区域
- 启用自定义
header_validator,例如设置为strict模式,或显式配置允许的 Header 名正则(如^[a-zA-Z0-9-]+$) - 保存后触发网关重启或热加载(具体依赖控制台提示)
配合 underscores_in_headers 避免兼容性陷阱
很多旧系统(如部分 Spring Boot 应用、PHP-FPM)习惯用下划线传参(X_API_KEY),但 RFC 不认可。若业务必须支持,不能只开 ignore_invalid_headers off,而应:
- 在网关侧显式启用
underscores_in_headers on(ASM/Envoy 中对应配置项需查文档确认键名,如envoy.http.header_validator.allow_underscores) - 同时确保后端服务也明确支持下划线(例如 Tomcat 需配
relaxedPathChars和relaxedQueryChars) - 更推荐方案:前端统一将
_替换为-(如X-Api-Key),从源头符合规范
为什么这属于“网关层加固”的一环
看似只是格式检查,实则切断了多类绕过路径:
- 防止攻击者用
X-Forwarded-For:后加空格或注释符干扰 IP 白名单判断 - 阻断通过
Content-Type: application/json; charset=utf-8中插入非法字符绕过 JSON 解析校验 - 避免畸形
Authorization头(如含不可见字符)被中间件错误提取,导致 JWT 验签跳过 - 配合 WAF 或自建鉴权服务,确保所有进入业务逻辑的 Header 都是可预期、可审计的格式










