При работе связки nginx+apache, HTTP запросы сначала обрабатываются с помощью nginx, а потом передаются apache. В этом случае HTTP запрос происходит с IP адреса, на котором расположен nginx, а не с IP, с которого на самом деле пришёл запрос. Из-за этого невозможно узнать, с какого IP пришел пользователь, что создаёт некоторые неудобства: в скриптах форумов/блогов/комментариев/гостевых книг/etc IP пользователей указываются как IP сервера, к тому же труднее бороться со спамом из-за невозможности бана спамера по его IP. Для того, чтобы восстановить настоящий IP после обработки запроса nginx'ом, нужен mod_rpaf.

Установка mod_rpaf на Apache 2.x

Соединяемся с сервером по SSH (с помощью программы Putty, например)

Устанавливаем пакет httpd-devel:

Код:

yum -y install httpd-devel

Скачиваем и устанавливаем 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
apxs -i -c -a mod_rpaf-2.0.so mod_rpaf-2.0.c

Далее создаем файл конфигурации mod_rpaf - /etc/httpd/conf.d/rpaf.conf
и добавляем в него строки:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx xx.xx.xx.xx

где xx.xx.xx.xx - IP адреса вашего сервера. Если на сервере более двух IP, пропишите их по той же аналогии через пробел.

Чтобы изменения вступили в силу, нужно перезапустить Apache, для этого выполняем команду

Код:

service httpd restart

В nginx внутри блока http {} должны быть указаны строки:

Код:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

если вы модифицировали nginx.conf, нужно перезапустить nginx:

Код:

/etc/init.d/nginx stop
/etc/init.d/nginx start

или проще:

service nginx restart

Проверяем корректность настройки мода.

Настройка mod_rpaf:

Работающий вариант rpaf.conf:

LoadModule ПУТЬ К /mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off 
RPAFproxy_ips 127.0.0.1 ххх.ххх.хх.ххх
RPAFheader X-Real-IP
где
ххх.ххх.хх.ххх - IP сервера.
RPAFsethostname Off - обязательно.

Проверяем, работает ли установленный модуль mod_rpaf. На любом из доменов, которые расположены на Вашем сервере, размещаем файл test.php, содержащий код:

<?
echo $_SERVER['REMOTE_ADDR'];
?>

Выходим на этот файл через браузер. Если в окне браузера видим IP, отличающийся от IP нашего сервера, модуль работает корректно.

Теперь IP пользователя настоящие, можно смело банить спамеров.

Добавить комментарий