2013-11-03 206 views
34

我使用Nginx作为代理来过滤到我的应用程序的请求。在“http_geoip_module”的帮助下,我创建了一个国家代码http-header,并且我想通过“headers-more-nginx-module”将它作为请求标头传递。这是Nginx的配置位置的块:来自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”,但是头部甚至没有传递给响应。

我在这里错过了什么?

+0

Hey Pelig。当有些人为你提供有用的回应时,它习惯于给予回复。如果你在搜索答案时发现你在这里登陆,它也适合提出一个问题。这是因为该网站基于声誉。我提高了你的问题和leshgrinder答案,因为我正在寻找相同的答案。 – jww

回答

62

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

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

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

+4

我刚想写回你的文章,因为我已经尝试过了,但它显然不行。我没有正确查看请求,但在使用[tcpdump](http://www.tcpdump.org)后,我发现标题一直都被传递过来......谢谢! – Peleg

+1

如果在客户端中设置。我只是想让这个价值传下来。我不知道我的nginx设置的价值是什么,所以我无法重置它。 我想要的是由客户端创建的任何自定义标头不改变地通过反向代理服务器。当然有一种方法可以做到这一点。 – 2014-04-23 18:47:44

+15

也确保你在服务器块中使用'''underscores_in_headers on''',否则nginx不会转发这些头文件! ref:http://serverfault.com/a/586997/317502 – kishorer747

相关问题