' Устанавливаем модуль mod_rpaf на CentOS (связка nginx+apache) | Шнайдер блог

Устанавливаем модуль mod_rpaf на CentOS (связка nginx+apache)

Если кто не знает, процесс «проброски» реального клиентского IP к серверу обеспечивается модулем mod_rpaf для Apache. При комбинировании nginx+apache, почти всегда возникает проблема в логах Апача – вместо реального айпи туда записывается localhost (127.0.0.1 или другой, если он переназначался). В то время как с логами nginx все нормально.

Давайте решим эту проблему!

Этап №1 – установка необходимых пакетов.

yum install httpd-devel gcc

Этап №2 – загрузка mod_rpaf.

cd /tmp

wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

Если скачать не получается, просто добавьте в /etc/hosts:

178.236.176.177 stderr.net

Этап №3 – сбор модуля с последующей установкой.

tar xvzf mod_rpaf-0.6.tar.gz

cd mod_rpaf-0.6

apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

cd

Этап №4 – конфигурирование mod_rpaf.

LoadModule rpaf_module modules/mod_rpaf-2.0.so

 

# mod_rpaf Configuration

 

RPAFenable On

RPAFsethostname On

RPAFproxy_ips 127.0.0.1 10.0.0.1

RPAFheader X-Forwarded-For

Важно: в параметре RPAFproxy_ips нужно вписать айпи, где слушает nginx. В 99% случаев подойдет 127.0.0.1

Этап №5 – подстройка конфигурации vhost в nginx.

Заходим в раздел location / и вносим туда:

proxy_pass http://apache_ip:apache_port/;

proxy_redirect off;

 

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass_header Set-Cookie;

Этап №6 – перезагрузка и тест.

/etc/init.d/httpd restart

/etc/init.d/nginx restart

Далее открываем свой сайт и смотрим лог-файл.

Сейчас:

 

tail /var/log/nginx/access.log

 

12.34.56.78 - - [01/May/2014:11:44:44 +0300]

Раньше:

tail /var/log/nginx/access.log

 

127.0.0.1 - - [01/May/2014:11:42:44 +0300]

Если вдруг способ вам не помог, внимательно пересмотрите инструкцию с самого начала. В некоторых местах нужно было вносить правки, актуальные для вашего сервера. Также пересмотрите error_log.