Наши статьи
Наши статьи об nginx, apache, lighttpd, fastcgi. вэб-технологиях и решениях, безопасности и тому подобном.
Howto - настройка аналога mod_realip для apache 2.0.x (mod_rpaf)
Доброго времени суток,
Долго я изучал и пробовал lighttpd и остановил свой выбор на nginx, хоть и нужен SSL тоже :) (стабильный SSL, но ssl в nginx еще не пробовал).
Примечание автора: На тот момент стабильность работы ssl в nginx еще известна не была.
В процесси настройки и внедрения nginx - возникла единственная проблема на Апаче 2.0.х - восстановление реального IP адреса на backend сервере (apache2). Для апача 1.3.х - такой модуль существует, который написал Игорь Сысоев, он называется mod_realip. После некоторых раздумий и чтения документации по mod_headers и остальной компании, стало понятно, что это не поможет в данной ситуации. Тогда я зарылся в любимый http://www.google.com и после 20 минут лирического диалога с полем поиска нашел нужный модуль, им оказался mod_rpaf. Скачать его можно отсюда - http://stderr.net/apache/rpaf/
Я его скачал, собрал и установил. Устанавливается он очень просто, с помощью apxs: apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
После этого добавляем его строкой в апач:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
Директивы этого модуля описаны в README файле, который идет к нему. Их всего три:
- RPAFEnable - включить модуль
- RPAFproxy_ips - IP адрес(а) фронт-энд сервера(-ов)
- RPAFsethostname - доводит до ума поле HOST, как на фронтэнде.
Можете создать просто mod_rpaf.conf и положить его в conf.d/..., текст следующий:
---------------------------- mod_rpaf.conf ----------
# LoadModule rpaf_module modules/mod_rpaf-2.0.so
#Configuration Directives: RPAFenable On
# Enable reverse proxy add forward RPAFproxy_ips YOUR_PROXY_SERVER_IP_LIST_OR_ONE_IP
# which ips are forwarding requests to us
#RPAFsethostname On
# let rpaf update vhost settings
# allows to have the same hostnames as in the "real"
# configuration for the forwarding Apache ------------------------------------------------------
RPAFproxy_ips - тут список IP вашего фронтенда или фронендов,
Пример: RPAFproxy_ips 127.0.0.1 192.168.1.45 182.142.35.24
Далее добавляем в конфигурацию nginx (раздел server), следующую строчку:
proxy_add_x_forwarded_for on; (до версии nginx 0.1.29)
(После версии 0.1.29 следует использовать:
proxy_set_header X-Forwarded-For $remote_addr;)
Теперь nginx передает бэкэнду IP клиента в поле: X-Forwarded-For, а на другом конце его подхватит mod_rpaf и сделает свое грязное дело ;)
Если Вы хотите сохранить все хедеры клиентов, которые ходят через прокси, то тогда надо подправить mod_rpaf на нужный Вам header (который он будет принимать за несущий реальный адрес клиента) и прописать его в proxy_set_header.
Теперь оба сервера перезапускаем любым способом, кому как нравится. :)
И Voila, как говорят знакомые бразильцы :)
Все это проделано на Fedora Core 2 и работает.
С Уважением, Дмитрий.
Owner and Founder of Remote Admin Service http://remote-admin-service.encrypted-life.net
23 декабря 2004
