WHM / cPanel Apache 2 + Nginx + Real-IP с модулем апача mod_rpaf
Apache 2 + Nginx + реальный айпи с модулем апача mod_rpaf
И так, если у вас на сервере панель WHM / cPanel, то с ней вы конечно установили и Apache 2.
Но как известно, Apache2 довольно довольно сильно грузит сервер при большой посещаемости и по этому нам на помощь может прийти Nginx сервер.
Nginx сервер по сути хорошая альтернатива Apache 2, но к сожалению не всегда приемлемая в ряде случаев.
Вот и я не стал переходить полностью на Nginx с Apache 2, а воспользовался хорошей возможностью Nginx в совместной работе с Apache 2 - это прокси кешированием запросов, что значительно снизит нагрузку на сервер создаваемую Apache 2-ем
После того как вы установите Nginx в качестве прокси сервера для Apache 2 (как устанавливать много раз ужи писалось, найдете в интернете), возникнет следующая проблема, апач не будет видеть айпи пользователей. Так как все переходы будут через Nginx, то апачу будет передоваться айпи Nginx, т.е. айпи сервера на котором они оба установлены.
В ряде случаев это не важно, но иногда нужно, что бы скрипты получали айпи пользователя для дальнейшей их обработки, тогда нам нужно воспользоваться возможностями модуля Apache mod_rpaf .
Что такое mod_rpaf?
Модуль rpaf служит для передачи реального айпи мользователя после обработки его сервером Nginx
Установка mod_rpaf
Скачать с сайта последнюю версию можно здесь: http://stderr.net/apache/rpaf/download/
Заходим на сервер через консоль и выполняем следующие команды:
cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xvfz mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Все mod_rpaf уже установлен, теперь только нужно подключить.
Как подключить mod_rpaf ?
Подключение mod_rpaf через WHM 11.34.1 (build 7):
1. Заходим в панель WHM
2. Далее открываем Service Configuration > Apache Configuration
3. Выбираем Include Editor
4. Далее Pre Main Include
5. После I wish to edit the Pre Main configuration include file for: выбираем во вкладке вашу версию Apache
6. Далее вписываем в открывшееся окно следующий код:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
# Загружаем сам модуль
RPAFenable On
# Включаем обратный прокси сервер
RPAFproxy_ips 127.0.0.1 x.x.x.x
# Вместо иксов добавляем список IP-адресов, управляемых с помощью Cpanel, пишем через пробел
RPAFsethostname On
# let rpaf update vhost settings allowing to have
# the same hostnames as in the “actual” configuration for the
# forwarding apache installation
RPAFheader X-Real-IP
# Allows you to change which header we have mod_rpaf looking for
# when trying to find the ip the that is forwarding our requests
То же самое все можно сделать не через WHM, а на прямую через консоль.
Находим файл конфигурации Apache, у меня он по адресу
/usr/local/apache/conf/httpd.conf , и вписываем выше приведенные команды.
Я же все вынес в отдельный файл rpaf.conf , который расположил по адресу /usr/local/apache/conf/includes/rpaf.conf
А в файл httpd.conf вместо внесения всего кода, добавил вызов файла rpaf.conf , строка:
Include "/usr/local/apache/conf/includes/rpaf.conf"
В настойках самого Nginx должны быть активными (со снятым знаком #) следующие команды:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /var/www/$host/web;
index index.html index.htm index.php;
access_log off;
proxy_pass http://127.0.0.1:81;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
В каком именно месте не скажу вам, так как у меня они по разным файлам уже были разбросаны и мне не пришлось ничего добавлять.
Настройки ищите по адресу /etc/nginx/
После настроек апача и никса не забудьте их перезагрузить
service httpd restart
/etc/init.d/nginx stop
/etc/init.d/nginx start
Как проверить, работает ли установленный модуль rpaf?
На любом из доменов, которые расположены на Вашем сервере, разместите файл test.php с содержимым: echo $_SERVER['REMOTE_ADDR']; ?>
Далее зайдите по ссылке http://domain.ru/test.php, где domain.ru - имя вашего домена. Если как результат отображается IP, отличающийся от IP вашего сервера, модуль работает корректно
Автор: BuxarNET (Тяшкевич Виталий) для IntFAQ.ru, по инструкции от хостинг провайдера Buxar-Host.ru