从 nginx 代理服务器转发请求头

我使用 Nginx 作为代理来过滤对应用程序的请求。在“ http _ geip _ 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”,但是头部甚至没有传递给响应。

我错过了什么?

175042 次浏览

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

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;
}

现在它被传递到代理后端。

问题是“ _”下划线在头属性中无效。如果删除下划线不是可以添加到服务器块的选项:

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 处于我的烧瓶应用程序和客户端之间,我的烧瓶应用程序就不会再看到标题了。调试起来有点费时间。

您可以通过添加以下内容来传递所有标头:

ignore_invalid_headers off;

但是请通过这样做来考虑安全问题。