3

我们有多个负载平衡的 webserver 机器运行相同的 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;
}
4

6 回答 6

5

当然这很简单

$ip = getHostByName(php_uname('n')); 
echo $ip;
于 2010-07-09T14:08:10.637 回答
4

它可能涉及更改负载平衡器连接到服务器的方式。不知道这是什么软件。

根据机器之间变化的其他一些因素进行切换可能会更好。一个不错的选择是主机名:

$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);
}
于 2010-07-08T11:37:53.483 回答
2

reverse rows in /etc/hosts

XXX.XX.XX.XX    blahblah
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

should work

于 2010-07-08T11:06:13.690 回答
1

用这个更准确!

echo getHostByName($_SERVER[HTTP_HOST]);
于 2018-01-20T11:21:16.970 回答
0

你真的应该有 som 服务器特定的配置被加载和里面的服务器 ID。每个系统的行为都会有所不同,并且会使用 ip 地址,主机名肯定很容易出错。通常服务器上有很多应用程序,从一天到另一天,它可能不再工作,您将很难调试(例如 some1 geths 设置反向条目的好主意,这样邮件就不会再收到垃圾邮件了? )

于 2010-08-28T16:30:16.707 回答
0

为了解决我的问题,我有 3 个想法:

  1. 我可能会将每台服务器的 IP 地址硬编码到我们在每台服务器上的配置文件中的 PHP 变量中。
  2. 我可能会为 Apache ( mod_rpaf )使用反向代理添加转发模块。
  3. 我可能会改变proxy_pass每台服务器上的去XXX.XXX.XXX.XXX:8880YYY.YYY.YYY.YYY:8880不是localhost
于 2010-07-09T13:32:36.120 回答