База знаний

Замена модулю mod_rpaf в Apache 2.4

  • 0

С недавних пор блог переехал с shared-хостинга на VPS под Ubuntu Linux. Вроде бы всё настроил, фронтенд nginx, web-сервер Apache 2.4. Для замены IP-адреса в apache при проксировании запросов от nginx — был установлен и настроен, по старой памяти, модуль mod_rpaf из репозитария дистрибутива. Но я начал замечать в комментариях блога IP-адрес 127.0.0.1, а это значит, что модуль не работает.

Гугление подсказало что в Apache 2.4 с данной проблемой столкнулся не только я. А в самом web-сервере уже есть встроенный модуль mod_remoteip, входящий в базовую поставку. Значит нужно настроить его.

Официальная документация к модулю: httpd.apache.org/docs/trunk/mod/mod_remoteip.html

 

В Ubuntu по умолчанию нет файла конфигурации, который должен находиться тут: /etc/apache2/mods-available/remoteip.conf, необходимо его создать:

touch /etc/apache2/mods-available/remoteip.conf

И добавить конфигурацию:

<IfModule remoteip_module>
  RemoteIPHeader X-Forwarded-For
  RemoteIPTrustedProxy 127.0.0.1/8
</IfModule>

Здесь два параметра: имя поля в который передаётся реальный IP от фронтенда и доверительная сеть, которая используется при проксировании.

Настройки проксирования в nginx, /etc/nginx/nginx.conf:

location / {
  proxy_pass http://127.0.0.1:8080/;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
}

Обратите внимание, что в обоих конфигурациях используется одно и то же поле X-Forwarded-For, через которое и передаётся реальный IP web-серверу от фронтенда.

За загрузку модуля отвечает файл конфигурации /etc/apache2/mods-available/remoteip.load, вот его содержимое:

LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so

Ещё один нюанс — логгирование. В access_log будет писаться по прежнему 127.0.0.1, нужно исправить настройки логгирования в файле конфигурации Apache /etc/apache2/apache2.conf:

#LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
#LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%a %l %u %t \"%r\" %>s %O" common

Заменяется %h на %a. Теперь когда всё готово, необходимо подключить этот модуль:

a2enmod remoteip

После этой команды в каталоге /etc/apache2/mods-enabled появятся символические ссылки на remoteip.conf и remoteip.load, останется только перезапустить web-сервер:

service apache2 restart

Теперь и в файлах журнала и в скриптах будет видно реальный IP посетителя, а не 127.0.0.1 .


Помог ли вам данный ответ?