#php #apache #nginx #php-5.6 #apache2.4
#php #apache #nginx #php-5.6 #apache2.4
Вопрос:
Итак, я переношу какой-то устаревший PHP-проект со старого сервера на новый. Новый сервер использует Debian 10 / Nginx / Apache 2.4 / PHP 5.6.40
Я настроил все так, как привык, используя mod_rpaf для переопределения удаленного IP-адреса тем, который поступает от nginx в X-Real-IP. Я вижу правильный адрес $_SERVER['HTTP_X_REAL_IP']
в PHP, но $_SERVER['REMOTE_ADDR']
по-прежнему ‘127.0.0.1’
Вещи, которые я уже пробовал:
- комментирование
<IfModule rpaf_module>
в файле rpaf.conf (в некоторых старых ответах предполагалось, что имя модуля может быть неправильным); - изменение конфигурационных директив с
RPAFenable
и т. Д. НаRPAF_Enable
и т. Д. — apache отказывается запускаться, Поэтому очевидноRPAFenable
, что формат правильный; - отключение mod_rpaf и использование mod_remoteip вместо этого — никакого эффекта;
- использование опции PHP auto_prepend_file ini file для замены REMOTE_ADDR на HTTP_X_REAL_IP — не имеет никакого эффекта, несмотря на выполнение кода (проверил его с
echo '1';
помощью ).
Так что я в тупике и не вижу другого варианта, кроме как просто использовать isset($_SERVER['HTTP_X_REAL_IP']) amp;amp; $_SERVER['HTTP_X_REAL_IP'] || $_SERVER['REMOTE_ADDR']
уродливые конструкции повсюду в коде…
Но я все еще надеюсь, что я чего-то не хватает.
Обновление: на самом деле, опция auto_prepend_file работала, но кажется немного хакерской… Я все равно хотел бы найти лучший вариант.
Комментарии:
1. что вы видите в журналах apache? %a отображает необходимый IP-адрес?
2. Нет, это 127.0.0.1. %h все же отображает правильный.