PHP $ _SERVER variables总是返回127.0.0.1

我们有多个负载平衡的networking服务器机器运行相同的PHPnetworking应用程序( LAMP ),我想在每个服务器上运行稍微不同的代码( 用于testing目的 )。 我希望使用$_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 '。 我如何configuration它们以使$_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服务器的stream量都从nginx到达:

 location / { root /var/www/staging/current; proxy_pass http://localhost:8880; } 

当然这很简单

 $ip = getHostByName(php_uname('n')); echo $ip; 

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

根据机器之间的变化,你可能会更好地切换。 一个好的选择是主机名:

 $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); } 

在/ etc / hosts中反转行

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

应该管用

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

  1. 我可能会将每个服务器的IP地址硬编码到每个服务器上的配置文件中的PHP变量中。
  2. 我可能使用Apache反向代理添加转发模块 ( mod_rpaf )。
  3. 我可能会更改每个服务器上的proxy_passXXX.XXX.XXX.XXX:8880YYY.YYY.YYY.YYY:8880而不是localhost

你应该真的有SOM服务器特定的配置,得到加载和服务器ID内。 每个系统都会有不同的表现,并且会为ip地址,主机名肯定是非常容易出错的。 通常在服务器上有很多应用程序,从一天到另一天,它可能不再工作,你会很难调试(例如有一个好主意,建立一个反向条目,所以邮件不会被垃圾邮件了? )