Я использую интерфейс Nginx для статических файлов и проксирую серверную часть Apache для PHP и Passenger, используя Apache mod_rpaf для установки правильного удаленного IP-адреса на серверной части. Все работало нормально, пока я не обновился до Ubuntu 12.04 (Precise). Теперь Apache сообщает обо всех подключениях с 127.0.0.1.
Вот соответствующая конфигурация. Здесь ничего не изменилось с обновлением.
Nginx:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
mod_rpaf:
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 ::1
RPAFheader X-Forwarded-For
</IfModule>
я использую %{X-Forwarded-For}i
в моей директиве Apache LogFormat, и журналы доступа показывают правильный удаленный адрес, поэтому я знаю, что Nginx передает адрес правильно.
В phpinfo()
test, HTTP_X_FORWARDED_FOR показывает правильный удаленный адрес, но REMOTE_ADDR - 127.0.0.1. Это также отражено в приложениях PHP, таких как комментарии WordPress.
Я пробовал переключить Nginx и mod_rpaf на X-Real-IP, но безрезультатно.
Что-то изменилось, что я пропустил?
Соответствующая информация о версии, все установлено из репозитория Ubuntu:
Nginx 1.1.19
Apache 2.2.22
mod_rpaf 0.6
Я только что с этим имел дело. В пятницу была подтверждена ошибка Ubuntu. Вы можете снова заставить все работать, изменив:
<IfModule mod_rpaf.c>
к
<IfModule mod_rpaf-2.0.c>
в /etc/apache2/mods-available/rpaf.conf
Похоже, что mod_rpaf устарел в Debian Jessie, и дальнейшая разработка остановлена. Переключитесь на mod_remoteip, который является модулем по умолчанию в Debian Jessie.
Просто обновление этого вопроса. Формат переменных, которые использует mod_rpaf, был изменен - Apache откажется начинать с перечисленных выше переменных (RPAFenable, RPAFsethostname, RPAFproxy_ips, RPAFheader).
Новый формат выглядит следующим образом:
LoadModule rpaf_module modules/mod_rpaf.so
RPAF_Enable On
RPAF_ProxyIPs 127.0.0.1 10.0.0.0/24
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
RPAF_ForbidIfNotProxy Off