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