Обычно я предполагал, что в сценарии PHP я могу проверить $_SERVER['REMOTE_ADDR']
, чтобы установить IP-адрес, с которого исходит запрос. Однако я начинаю задаваться вопросом, не сложнее ли все. Вот сценарий
- Я запускаю несколько серверов, называю их A, B и C, на которых пользователи должны быть "зарегистрированы"
- Я запускаю отдельный сервер регистрации, называю его S, где учетные данные пользователей и т. д. сначала проверяются перед отправкой полного запроса на регистрацию на серверы A, B и C.
Запрос выходит как
file_get_contents('https://url?data=value')
На серверах A, B и C я довольно наивно тестировал $_SERVER['REMOTE_ADDR']
, чтобы установить, что запрос действительно исходил от сервера S. К моему большому удивлению, результаты оказались неоднородными и непостоянными.
- Значением в
REMOTE_ADDR
был IP-адрес пользователя, взаимодействующего с сервером регистрации, S. - Значением в
REMOTE_ADDR
был IP-адрес сервера регистрации, S — то, что я ожидал видеть все время. - Значение в
REMOTE_ADDR
было другим IP-адресом из пула IP-адресов на виртуальном сервере, на котором размещен сервер S.
Мне действительно не нужно выполнять этот дополнительный проверочный тест, поэтому я могу вообще отказаться от него. Тем не менее, этот результат застал меня врасплох, поэтому мне любопытно посмотреть, может ли кто-нибудь здесь пролить свет на то, что происходит.
Я должен упомянуть, что я запускаю PHP 5.5 на Lighttpd на серверах A, B и C и PHP 5.3 на Apache 2 на сервере S.
$myCustomersIP = $_SERVER["HTTP_X_FORWARDED_FOR"];
неправильно. Но я с вами полностью согласен :) 24.06.2014