我们有多台负载平衡的Web服务器机器运行相同的PHP webapp(LAMP),我希望在每台服务器上运行略有不同的代码(* 用于测试目的 *)。我希望使用$_SERVER['SERVER_ADDR']
超级全局变量来执行类似以下操作:
if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
echo "Do one thing";
} elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
echo "Do something else";
}
不幸的是,这不起作用,因为两台机器都将$_SERVER['SERVER_ADDR']
设置为'127.0.0.1'。如何配置它们,以便将$_SERVER['SERVER_ADDR']
设置为它们的公共IP地址?
我猜这个问题可能与/etc/hosts
有关,因此作为参考,它目前看起来如下所示:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
XXX.XX.XX.XX blahblah
更新...
糟糕!我忽略了考虑Web服务器前面的nginx反向代理。由于nginx conf中的以下行,所有到这些Web服务器的流量都来自nginx:
location / {
root /var/www/staging/current;
proxy_pass http://localhost:8880;
}
7条答案
按热度按时间i1icjdpr1#
当然这很简单
mqxuamgl2#
这可能涉及到改变负载均衡器连接到服务器的方式。我不知道这是什么软件。
最好根据机器之间的其他变化因素进行切换,最好是主机名:
falq053o3#
反转/etc/hosts中的行
应该可以
lx0bsm1f4#
用这个更准确!
ctehm74n5#
要解决我的问题,我有3个想法:
1.我可以将每个服务器的IP地址硬编码到每个服务器上的配置文件中的PHP变量中。
1.我可能会使用 * 反向代理添加Apache* 的转发模块(mod_rpaf)。
1.我可能会将每台服务器上的
proxy_pass
更改为XXX.XXX.XXX.XXX:8880
和YYY.YYY.YYY.YYY:8880
,而不是localhost
?5cnsuln76#
你真的应该有som服务器特定的配置,得到加载和一个服务器id内。每个系统将表现不同,并去为ip地址,主机名是definantly非常错误易受攻击.通常有许多应用程序在服务器和从一天到另一个它可能不再工作,你将有一个困难的时间调试(例如,有人得到了一个好主意,设置一个反向条目,使邮件不会得到垃圾邮件了?)
iszxjhcz7#
在Apache 2.4和更高版本$_SERVER ['SERVER_ADDR']中,如果您从本地主机调用服务器,它将返回类似于::1的内容,而不是127.0.0.1
要解决这个问题,请转到Apache conf文件并更改
到
最后,请确保您的服务器不在反向代理的后面