nginx反向代理无法获取带下划线的 HTTP Header解决办法

byourb 2017-04-27

关键字:

问题描述:

通过nginx反向代理到tomcat,自定义Header中,其中带下划线的Hdader在tomcat应用中获取不到,类似于n_name/cookie_sig这样的名称;

处理办法:

1:配置中http部分增加underscores_in_headerson;配置

2:用减号-替代下划线符号_,避免这种变态问题。nginx默认忽略掉下划线可能有些原因。

原因(有时间的可以了解下根源):

明显是忽略掉了我自定义的header。

差点绝望。还好开源软件可以看源码。

找出个所以然,果然被我找到问题了:

rc=ngx_http_parse_header_line(r,r->header_in,cscf->underscores_in_headers);

if(r->invalid_header&&cscf->ignore_invalid_headers)

在ngx_http_parse_header_line()函数中

if(ch==‘_’){

if(allow_underscores){

hash=ngx_hash(hash,ch);

r->lowcase_header[i++]=ch;

i&=(NGX_HTTP_LC_HEADER_LEN–1);

}else{

r->invalid_header=1;

}

红色部分就是问题所在了

原来是对headername的字符做了限制,默认underscores_in_headers为off,表示如果headername中包含下划线,则忽略掉。恰好我自定义的header中都是用的下划线。

相关推荐