ignore_invalid_headers 控制Nginx对非法请求头的处理方式:on时跳过非法头继续处理,off时立即返回400;仅作用于请求头,须在http块中配置,默认on。

ignore_invalid_headers 是 Nginx HTTP 块中的一个指令,用于控制是否忽略客户端发送的格式不合规的请求头(如含空格、不可见字符、非法命名等)。它不“过滤”请求,而是决定 Nginx 遇到非法 Header 时是直接拒绝(返回 400)还是跳过该 Header 继续处理。
作用机制:忽略 vs 拒绝
当 ignore_invalid_headers on(默认值)时,Nginx 会跳过无法解析的请求头字段,不将其传入后续处理(如 proxy_pass、变量引用),但请求本身仍被接受;
当 ignore_invalid_headers off 时,只要发现任一请求头名称不符合 RFC 7230 规范(例如含下划线 _、空格、控制字符、以数字开头等),Nginx 立即返回 400 Bad Request,且不执行任何 location 匹配或 upstream 转发。
常见触发非法头的场景
- 客户端(尤其是某些 SDK 或测试工具)错误地使用下划线命名自定义头,如
X-User_Id(RFC 明确要求 header 名只能含A-Z、a-z、0-9、-) - 前端 JS 通过
fetch或XMLHttpRequest设置了含空格或特殊符号的 header 名 - 恶意扫描器或旧版爬虫发送畸形头,如
Host: example.com\r\nX-Foo: - 上游代理(如 CDN、WAF)未规范清理 header,透传了非法字段
配置建议与注意事项
生产环境通常保持默认 on,避免因个别非法头导致大量合法请求被 400 中断;若需强安全策略(如金融类 API),可设为 off 并配合日志监控异常来源。
注意:该指令仅影响请求头(Request Headers),不影响响应头;也不影响请求体或 URL 解析。
另外,它必须在 http{...} 块中设置,不能写在 server 或 location 块内——Nginx 会报错。
辅助排查方法
开启 error_log 的 info 级别(如 error_log /var/log/nginx/error.log info;),当出现非法头且 ignore_invalid_headers off 时,日志中会出现类似:
可用于定位问题客户端或中间件。










