nginx 做proxy 不转发 http header问题解决
原文地址:未知
使用nginx做负载均衡或http代理时,碰到http header不转发的问题。 配置里只有转发设置原始ip和host的 proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host; 但我自定义的header却都忽略掉了。百思不得其解: 1、理论上转发header是基本功能啊,apache都没问题 2、网上也搜不到此类问题说明 3、可能大家都不用客户端自定义提交header? malcolm说nginx是七层,可能忽略了。让我用其他的代理服务器 可想用nginx,应用又必须自定义http header。咋办? 打开nginx的debug: 配置中: daemon off; error_log logs/error.log debug; 看error_log 发现解析header时出现: 2010/12/13 18:49:06 [info] 6248#1476: *1 client sent invalid header line: “wiz_api_version: 2″ while reading client request headers, client: 223.254.100.103, server: localhost, request: “POST /wizkm/a/upload HTTP/1.1″ 明显是忽略掉了我自定义的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;
}