У нас есть несколько загружаемых по нагрузке веб-серверных машин, работающих на одном и том же 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 идеи:
proxy_pass
на каждом сервере, чтобы перейти к XXX.XXX.XXX.XXX:8880
и YYY.YYY.YYY.YYY:8880
а не localhost
? вы должны действительно иметь конфигурацию конфигурации сервера som, которая загружается, и идентификатор сервера внутри. каждая система будет вести себя по-другому и собирается для ip-адресов, имя хоста, безусловно, очень уязвимо для ошибок. обычно на сервере есть много приложений, и с одного дня на другой он может не работать, и вам будет трудно отлаживать (например, some1 geths хорошая идея настроить обратную запись, чтобы письма больше не пропадали спамом? )