PHP$(服务器[‘;服务器地址’;]变量始终返回127.0.0.1
我们有多台负载平衡的web服务器机器运行相同的phpwebapp(),我希望在每台服务器上运行稍微不同的代码(出于测试目的)。我希望使用PHP$(服务器[‘;服务器地址’;]变量始终返回127.0.0.1,php,linux,lamp,superglobals,server-farm,Php,Linux,Lamp,Superglobals,Server Farm,我们有多台负载平衡的web服务器机器运行相同的phpwebapp(),我希望在每台服务器上运行稍微不同的代码(出于测试目的)。我希望使用$\u服务器['SERVER\u ADDR']super-global来执行以下操作: if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') { echo "Do one thing"; } elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') { ech
$\u服务器['SERVER\u ADDR']
super-global来执行以下操作:
if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
echo "Do one thing";
} elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
echo "Do something else";
}
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
XXX.XX.XX.XX blahblah
不幸的是,这不起作用,因为两台计算机都将$\u SERVER['SERVER\u ADDR']
设置为'127.0.0.1'。如何配置它们,以便将$\u SERVER['SERVER\u ADDR']
设置为它们的公共IP地址
我猜这个问题可能与/etc/hosts
有关,因此对于参考,目前的情况如下:
if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
echo "Do one thing";
} elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
echo "Do something else";
}
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
XXX.XX.XX.XX blahblah
更新。。。
哎呀!我忽略了在Web服务器前面考虑反向代理。由于nginx conf中的以下行,这些web服务器的所有流量都来自nginx:
location / {
root /var/www/staging/current;
proxy_pass http://localhost:8880;
}
反转/etc/hosts中的行
XXX.XX.XX.XX blahblah
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
如果工作正常,可能需要更改负载平衡器与服务器的连接方式。我不知道这是什么软件 您最好根据机器之间发生变化的其他因素进行切换。一个很好的选择是主机名:
$host= php_uname('n');
switch($host) {
case 'webserver1':
...do one thing...
break;
case 'webserver2':
...do another thing...
break;
default:
die('No configuration for unknown host '.$host);
}
要解决我的问题,我有3个想法:
代理\u密码更改为转到XXX.XXX.XXX:8880
和YYY.YYY.YYY:8880
,而不是localhost
这当然很简单
$ip = getHostByName(php_uname('n'));
echo $ip;
实际上,您应该具有加载的特定于som服务器的配置以及其中的服务器id。
每一个系统都会表现出不同的行为,对于ip地址,主机名无疑是非常容易出错的。通常,服务器上有许多应用程序,从一天到另一天,这些应用程序可能无法继续工作,您将很难进行调试(例如,有些人想出了一个好主意,设置一个反向条目,这样邮件就不会再被垃圾发了?使用此选项更准确
echo getHostByName($_SERVER[HTTP_HOST]);
这是通过还是通过访问?这是在我公开访问站点时发生的,即从负载平衡器的IP访问。我首先有
127.0.0.1
条目,它工作正常。。。也许这与Apache配置有关?我尝试了反转这些行(记得重新启动网络服务和Apache)-但不幸的是没有运气。我不知道这些PHP函数-感谢您让我了解它们。这只是另一个糟糕的解决方案,易受相同错误的影响。。。例如,在我的系统上,这段代码正好输出127.0.1.1