@deyen

В чём разница gethostbyaddr() и $_SERVER['REMOTE_HOST'] в PHP?

Недавно заметил, что у Осьминога работает $_SERVER['REMOTE_HOST'] странным образом, оно всегда имеет значение "localhost". Как мне сказала техподдержка: это из-за того, что у них стоит Nginx перед Apache и посоветовали использовать gethostbyaddr(), которая работает нормально, т.е. отображает реальный hostname клиента. На php.net я не нашёл в чём разница между ними, поэтому хотелось бы узнать как работают переменная $_SERVER['REMOTE_HOST'] и функция gethostbyaddr()
  • Вопрос задан
  • 586 просмотров
Решения вопроса 1
@none7
Переменная REMOTE_HOST устанавливается web-сервером на основе сишной функции gethostbyaddr() и php вообще никак не участвует. Если при использовании nginx в качестве proxy, REMOTE_ADDR имеет реальный адрес, а REMOTE_HOST == 'localhost', то это баг того модуля web-сервера, что подменяет IP-адрес подключения. Должно быть $remote_host == gethostbyaddr($remote_addr) || $remote_host == $remote_addr. Если REMOTE_ADDR всегда равен '127.0.0.1' или '::1', то это недоработка хостера.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
gethostbyaddr вообще про другое, оно по IP(!) получает домен к которому "привязан" этот адрес. Reverse DNS называется.

И это ничего общего с REMOTE_ADDR и получанием IP пользователя не имеет.

это из-за того, что у них стоит Nginx перед Apache

это исправляется на уровне вебсервера как раз, чтобы php получал правильный адрес, а не адрес машины на которой он стоит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы