You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 过滤含点自定义请求头的原因及解决方案是什么?

Nginx过滤含特殊字符自定义请求头的成因与解决方案

成因

  • Nginx默认对HTTP请求头名称做了合法性校验,默认仅允许大小写英文字母、数字、连字符-三类字符,包含点.、下划线_等其余特殊字符的请求头会被判定为非法,默认直接丢弃不会转发给上游服务。
  • 该设计的初衷是为了适配CGI规范:请求头转发给CGI程序时会被转换为环境变量,而环境变量命名不允许出现点等特殊字符,默认拦截非法请求头可以避免后续解析出现异常或安全风险。例如world.peace请求头转环境变量会得到HTTP_WORLD.PEACE,点号不符合大多数系统的环境变量命名规则,因此Nginx默认做了过滤。

处理方法

方案1:调整请求头命名(最优方案)

将自定义请求头中的特殊字符替换为Nginx默认允许的连字符-,例如将world.peace修改为world-peace,无需修改任何Nginx配置即可正常转发,兼容性最高,无版本限制。

方案2:修改Nginx配置允许特殊字符请求头

如果业务必须保留含点、下划线的请求头命名,可调整Nginx配置放行合法的特殊字符:

  1. 首先确认你的Nginx版本 >= 1.11.5,该版本起支持valid_header_names自定义合法请求头规则
  2. 在Nginx的http/server/location配置块中添加如下配置:
# 允许请求头包含下划线
underscores_in_headers on;
# 自定义合法请求头正则:允许字母、数字、连字符、点、下划线
valid_header_names ~^[a-zA-Z0-9-_.]+$;
  1. 执行配置校验命令nginx -t确认配置无误后,执行nginx -s reload平滑重启Nginx即可生效。

如果你的Nginx版本低于1.11.5,无valid_header_names指令支持,只能选择方案1调整请求头命名,或者先升级Nginx版本后再使用方案2。


内容的提问来源于stack exchange,提问作者2333333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:51:02