Установка mod_rpaf2 для Apache2+nginx в Debian 6

понедельник, 12 сентября 2011 г.

Если на сервере под управлением Debian установить nginx на фронтэнд, то Apache, выполняя роль бэкэнда, будет получать в переменной $_SERVER['REMOTE_ADDR'] неверный IP адрес. Для апача эта переменная будет 127.0.0.1. И во всех log-файлах будет соответственно неправильная информация про IP.

Решается это с помощью установки модуля mod_rpaf2 (для Apache2, для Apache первой версии нужен mod_rpaf). Суть в том, что пробрасывается в заголовке X-Forwarded-For от nginx правильный IP и Apache видит реальный IP адрес.
Итак по порядку.


Версия mod_rpaf нам нужна только 0.6, потому как в предыдущих версиях не поддерживается директива RPAFheader. Для этого нам надо эту версию скачать и скомпилировать. Для этого понадобится apxs2 (APache eXtenSion tool). Ставится она в комплекте с другими средствами разработки под Apache:



apt-get update #обновим данные из репозитариев
apt-get install apache2-prefork-dev

Установка данного набора никак не влияет на текущую работу сервера Apache! Можно устанавливать смело.
Рестартим Apache


/etc/init.d/apache2 restart 

Надо скачать и установить mod_rpaf


cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs2 -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Последняя в списке команда как раз компилирует модуль и устанавливает его.
В директории где находятся модули Апача (/etc/apache2/mods-available/), надо создать два файла:
rpaf-2.0.conf с содержимым:

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 123.456.789.111 222.33.444.77
#127.0.0.1 остается неизменно, а все нужные сервера IP вписываете через пробел
RPAFheader X-Forwarded-For #как раз тот самый заголовок
rpaf-2.0.load с содержимым:


LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so
Дальше надо модуль включить:

a2enmod rpaf-2.0

И снова перезапускаем Apache

/etc/init.d/apache2 restart 
В конфиге nginx для нужных доменов внутри server {...}надо вписать:


proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

Лично у меня после именно таких действий в логах апача IP стал прописываться как надо. Лог посмотреть можно, по умолчанию, /var/www/http-logs/название.домена.access.log. Но путь может быть и другим!

2 коммент.:

Анонимный комментирует...

спасибо, уже второй раз обращаюсь к статье, наглядно очень

Анонимный комментирует...

Благодарю за публикацию. Полезно.

Copyright © 2010 WEB IT blog