Связка Nginx Apache mod_remoteip или mod_rpaf

Установка связки Nginx оптимизация и использование, Apache и mod_rpaf.

  • Ubuntu

Установка nginx 7.65 в Ubuntu 10.04.3 LTS

# aptitude install nginx

Для установки более свежей версии (1.0.5 stable) нужно подключить репозиторий Nginx PPA на Launchpad.

# aptitude install python-software-properties

# add-apt-repository ppa:nginx/stable
или add-apt-repository ppa:nginx/development если нужно установить последнюю нестабильную версию
# aptitude update
# aptitude install nginx
  • Debian можно подключить для Debian Squeeze порты от Wheezy и добавить сторонний репозиторий
# nginx 
deb http://mirror.yandex.ru/debian/ wheezy main
deb-src http://mirror.yandex.ru/debian/ wheezy main
# nginx -V
nginx version: nginx/1.1.11
built by gcc 4.6.2 (Debian 4.6.2-4)

или же можно добавить репозиторий The repository for Debian-based LAMP servers и ключ к нему

deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all
# wget -q -O - http://www.dotdeb.org/dotdeb.gpg | apt-key add -

mod_rpaf: cвязка Apache и Nginx

Для связки Apache и Nginx оптимизация и использование существует несколько вариантов:

  • при помощи mod_rpaf предварительно установив его из исходных кодов или из репозитория
    # aptitude install libapache2-mod-rpaf
  • при помощи модуля mod_extract_forwarded обеспечивающего функциональность аналогичную mod_rpaf.

Теория: запрос клиента приходит на nginx, nginx запрашивает Apache, при этом HTTP- заголовок HOST теряется, а адрес клиента REMOTE_ADDR Apache определит как 127.0.0.1. Заголовок HOST подставим в настройках nginx

# nano /etc/nginx/proxy_params
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Но REMOTE_ADDR Apache определяет сам. Решается эта проблема при помощи mod_rpaf. Работает он следующим образом: Nginx знает IP клиента и добавляет некий HTTP-заголовок (например X-Real-IP), в который прописывает этот IP. mod_rpaf получает этот заголовок и прописывает его содержимое в переменную REMOTE_ADDR Apache. Таким образом, php-скрипты, выполняемые Apache будут видеть реальный IP клиента.

Убедитесь что устанавливаемая версия mod_rpaf не ниже чем 0.6 иначе директива RPAFheader работать не будет.

Для связки Apache и nginx нужен установленный модуль mod_rpaf не ниже версии 0.6. Установка из исходных кодов описана в mod_rpaf.

aptitude install libapache2-mod-rpaf

Настроим mod_rpaf:

# nano /etc/apache2/mods-enabled/rpaf.load
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

В конфигурационный файл mod_rpaf нужно изменения(добавить) параметры.

# nano /etc/apache2/mods-enabled/rpaf.conf

# Включить модуль
RPAFenable On
# Исправить поле HOST
RPAFsethostname Off
# Список IP front-end (один или больше)
RPAFproxy_ips 127.0.0.1 Your_Real_IP
# Какое поле заголовка брать для замены X-Real-IP или X-Forwarded-For
RPAFheader X-Forwarded-For
  • Пример простого виртуального хоста, который только перенаправляет запросы Apache
server {
        listen       80;
        server_name  YourNameDomen.com;

        error_log   /var/log/nginx/error.log  info;
        access_log  /var/log/nginx/access.log;

    location / {
        proxy_pass http://127.0.0.1:81/;
    }
}
PQ VPS сервера в 28+ странах.