AllTrails

Deltahost

Facebook

Instagram

Komoot

Strava

YouTube

🏠 Oleksandr Rudenko blog

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

30.01.2016 | Олександр

С недавних пор блог переехал с 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\" %>> %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.


Коментарі

⬆️ Наверх сторінки