Параметр PHP $ _SERVER всегда возвращает 127.0.0.1

У нас есть несколько загружаемых по нагрузке веб-серверных машин, работающих на одном и том же 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 

Обновить…

Ой ! Я пренебрег рассмотрением обратного прокси nginx перед веб-серверами. Весь трафик на эти веб-серверы поступает из nginx из-за следующей строки в nginx conf:

 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_pass на каждом сервере, чтобы перейти к XXX.XXX.XXX.XXX:8880 и YYY.YYY.YYY.YYY:8880 а не localhost ?

    вы должны действительно иметь конфигурацию конфигурации сервера som, которая загружается, и идентификатор сервера внутри. каждая система будет вести себя по-другому и собирается для ip-адресов, имя хоста, безусловно, очень уязвимо для ошибок. обычно на сервере есть много приложений, и с одного дня на другой он может не работать, и вам будет трудно отлаживать (например, some1 geths хорошая идея настроить обратную запись, чтобы письма больше не пропадали спамом? )