来自nginx代理服务器的转发请求标头

时间:2013-11-03 08:58:29

标签: nginx proxy http-headers

我正在使用Nginx作为代理来过滤对我的应用程序的请求。在“http_geoip_module”的帮助下,我正在创建一个国家代码http-header,我想使用“headers-more-nginx-module”将其作为请求头传递。这是Nginx配置中的位置块:

location / {
    proxy_pass                      http://mysite.com;
    proxy_set_header                Host http://mysite.com;;
    proxy_pass_request_headers      on;
    more_set_headers 'HTTP_Country-Code: $geoip_country_code';
}

但这只会在响应中设置标题。我尝试使用“more_set_input_headers”而不是“more_set_headers”,但后来标题甚至没有传递给响应。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:83)

如果要将变量传递给代理后端,则必须使用代理模块进行设置。

location / {
    proxy_pass                      http://example.com;
    proxy_set_header                Host example.com;
    proxy_set_header                HTTP_Country-Code $geoip_country_code;
    proxy_pass_request_headers      on;
}

现在它已传递给代理后端。

答案 1 :(得分:14)

问题在于' _'下划线在header属性中无效。如果删除下划线不是一个选项,您可以添加到服务器块:

underscores_in_headers on;

这基本上是@kishorer747对@Fleshgrinder答案的评论的复制和粘贴,解决方案来自:https://serverfault.com/questions/586970/nginx-is-not-forwarding-a-header-value-when-using-proxy-pass/586997#586997

我在这里添加了它,因为在我的情况下,nginx背后的应用程序工作得非常好,但是一旦ngix在我的烧瓶应用程序和客户端之间,我的烧瓶应用程序将不再看到标题。调试需要花费一些时间。