如何从内部应用程序服务器获取反向代理的HTTP_HOST

时间:2016-05-13 22:04:10

标签: apache http proxy

反向代理服务器将请求转发给内部应用程序服务器。代理服务器的HTTP_HOST值设置为用于访问网站的主机名,例如:www.example.comwww.alias2.comwww.alias3.com

内部服务器接收对其内部IP地址的请求,因此其HTTP_HOST值设置为:192.168.64.2

内部应用程序服务器如何确定原始http请求中Host:使用了哪个域名?

可以将SERVER_NAME配置为应用程序使用的主机名,但如果有许多不同的主机名别名可以访问该网站,我们怎么知道使用了哪一个?

查看应用程序服务器上Apache可用的所有环境变量,没有一个指示除HTTP_REFERER之外的请求主机名(显然不能依赖它):

[HTTP_HOST] => 192.168.64.2:80
[SERVER_NAME] => 192.168.64.2
[REMOTE_ADDR] => 192.168.64.1
[SERVER_ADDR] => 172.19.0.3
[SCRIPT_URI] => http://192.168.64.2:80/index.php
[HTTP_REFERER] => http://www.example.com/prev/

我知道可以配置一些反向代理来转发原始请求中使用的主机名。我是一般性地问这个问题,因为我想知道是否有一个非特定于代理的解决方案。目前我在开发过程中使用BrowserSync作为反向代理,似乎没有办法转发http主机,无论如何,我希望能够设计我的应用程序以便它不会不依赖提供此信息的反向代理。

1 个答案:

答案 0 :(得分:0)

过去常常通过设置非标准X-Forwarded-For标头来解决您所寻找的问题。这已被RFC 7239中定义的Forwarded标头取代。与您相关的部分是section 5.3

X-Forwarded-For已经the de-facto standard了很长时间了,对它的工具支持通常会更好。例如。 nginx通过$proxy_add_x_forwarded_for支持它,可以方便地设置:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Apache通过mod_proxy提供了类似的功能。在撰写本文时,对Forwarded的mod_proxy_http重新归档支持an open ticket

在接收方,apache有mod_rpaf,它会根据X-Forwarded-For标题设置各种环境变量。

至于Browsersync:我认为你可以通过proxy.reqHeaders指令设置所需的标题。