У меня есть два сервера Windows в сети клиента, с одним сервером (S1), имеющим общедоступный IP-адрес, и запросы перенаправления портов в веб-приложение PHP, работающее в Apache, на другом сервере (S2), который не имеет общедоступного IP-адреса.
Используя PHP и Apache, S2 видит удаленный адрес входящих запросов только как внутренний IP-адрес S1.
Я хотел бы, чтобы S2 мог видеть фактический IP-адрес клиента для регистрации, но после долгих поисков и отладки я не смог заставить это работать.
Примерное представление о том, как запросы поступают и выходят из системы, выглядит следующим образом:
S1 не использует никаких приложений (обратный прокси-сервер и т. Д.) Для пересылки этих запросов, что означает, что он не может добавить заголовок X-FORWARDED-FOR (или любой из других заголовков прокси-сервера) к HTTP-запросу.
Усеченная версия $_SERVER
массив из phpinfo()
как показано ниже:
Я нашел этот вопрос, в чьем верхнем ответе конкретно упоминается переадресация портов, которая может быть «мешать с пакетами», что, как представляется, именно то, что происходит в этом случае.
Есть ли способ увидеть IP удаленного клиента вместо IP S1? Есть ли конфиг, который можно установить в Apache или PHP для этого? Или это на сетевом уровне и, следовательно, не может быть решена на прикладном уровне? Я не очень разбираюсь в сетях, чтобы знать, что искать.
Если вы теряете IP-адрес клиента, значит, это не переадресация портов. Это больше похоже на завершение SSL, когда S1 обрабатывает SSL и перенаправляет расшифрованный трафик на S2. Такой вид перехвата (не говоря о том, что это тот сценарий — просто вроде как) приведет к сценарию, который вы видите.
В этом сценарии лучше всего определить конкретную конфигурацию / технологию, выполняющую пересылку, и попросить ее скопировать исходный удаленный IP-адрес в переменные среды для запроса к S2. Простой способ сделать это — вставить IP-адрес в пользовательский HTTP-заголовок, чтобы он отображался в вашем массиве $ _SERVER.
Но как это конкретно делается, зависит от настройки на S1, поскольку S1 переписывает пакеты (IP хранится в заголовке пакета).
Других решений пока нет …