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

从nginx代理服务器转发请求头,nginx,proxy,http-headers,Nginx,Proxy,Http Headers,我使用Nginx作为代理来过滤对我的应用程序的请求。在“http_geoip_module”的帮助下,我正在创建一个国家代码http头,我希望使用“headers more nginx module”将其作为请求头传递。这是Nginx配置中的位置块: location / { proxy_pass http://mysite.com; proxy_set_header Host http://mysite.c

我使用Nginx作为代理来过滤对我的应用程序的请求。在“http_geoip_module”的帮助下,我正在创建一个国家代码http头,我希望使用“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\u set\u input\u headers”而不是“more\u set\u headers”,但是这个头甚至没有传递给响应


这里缺少什么?

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

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

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

问题是“\u”下划线在header属性中无效。如果删除下划线不是一个选项,则可以添加到服务器块:

underscores_in_headers on;
这基本上是@kishorer747对@Fleshgrinder answer的评论的复制和粘贴,解决方案来自:


我在这里添加了它,因为在我的案例中,nginx背后的应用程序工作得非常好,但是一旦ngix位于我的flask应用程序和客户端之间,我的flask应用程序就再也看不到标题了。调试有点费时。

我正要给你回信说它不起作用,因为我已经试过了,但显然它起作用了。我没有正确地查看请求,但在使用后,我看到整个过程中都传递了标头。。。谢谢如果它是在客户端中设置的。我只想把那个值传下去。我不知道nginx设置中的值是多少,因此无法重置它。我想要的是让客户机创建的任何自定义头不加更改地传递到反向代理服务器。当然有一种方法可以做到这一点。也要确保在标题中使用
下划线在您的服务器块中,否则nginx不会转发这些头!ref:这是传递主机头的正确方法吗?主机头不应包括
http://
。除非nginx正在做一些魔术来消除它,否则我会说相关的
proxy\u set\u header
语句是错误的。@Fleshgrinder 301/302重定向也可以这样做吗?这正是我使用nginx时遇到的问题,我的搜索也引导我来到这里。接受的答案没有任何区别。还要检查您是否在docker swarm集群内的docker容器中运行nginx,如果是,则必须遵循