【发布时间】:2016-09-10 05:45:16
【问题描述】:
反向代理服务器将请求转发到内部应用程序服务器。代理服务器将其 HTTP_HOST 值设置为用于访问站点的主机名,例如:www.example.com 或 www.alias2.com 或 www.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 主机,无论如何,我希望能够设计我的应用程序以便它不会'不要依赖提供此信息的反向代理。
【问题讨论】:
-
您如何看待这个工作?如果您为多个主机名提供服务,但反向代理只是没有告诉您使用哪个主机名,您还可以从哪里实际获取这些信息?