Быстрая настройка nginx как обратного прокси для apache

Предположим, что у нас есть настроенный и функционирующий web сервер apache (httpd) и мы хотим убрать его за nginx. Не будем сейчас рассматривать причины, по которым мы хотим это сделать — они всегда найдутся. Например, мы хотим, что бы nginx отдавал статичное содержимое, оставляя apache обработку динамических страниц (php, например). Итак. У нас есть httpd. Он, естественно, слушает 80-й порт. Но на этот порт мы собираемся навесить nginx; соответственно, в настройках apache нужно изменить порт, который он слушает (здесь и далее пути к конфигурационным файлам указаны для RedHat/Centos etc):

/etc/httpd/conf/httpd.conf

...
Listen XXX.XXX.XXX.XXX:8080
...
...
NameVirtualHost *:8080
...

Следуя синтаксису httpd.conf, в директиве Listen вполне можно опустить ip адрес. А в NameVirtualHost его можно написать. Не буду сейчас останавливаться на этом подробно; мы договорились, что httpd у нас уже функционирует. Если интересно — напишу отдельную статью про виртуальные хосты.

Итак. Мы сказали apache слушать порт 8080. Теперь необходимо аналогичную процедуру провести со всеми виртуальными хостами, которые обслуживает наш httpd. Расположение этих конфигураций зависит от способа, которым мы их добавляли. Они могут быть как в основном файле конфигурации (неправильный метод, кроме случая, когда apache обслуживает один хост), так и в отдельных файлах, расположенных в отдельной директории (/etc/httpd/sites/my_wonderful_site.conf например ):

<VirtualHost *:8080>
    DocumentRoot /var/www/my_site
    ServerName my_wonderful_site.in
    ServerAlias www.my_wonderful_site.in
    <Directory /var/www/my_site>
        AllowOverride All
        Allow From All
        Options +Indexes
    </Directory>
    ErrorLog /var/log/httpd/my_site.error.log
    CustomLog /var/log/httpd/my_site.access.log combined
</VirtualHost>

Теперь не забудем добавить правило для нашего параноидального iptables:

/etc/sysconfig/iptables

-A INPUT -p tcp -m tcp -s 127.0.0.1 --dport 8080 -j ACCEPT

Установим nginx.

yum install nginx

 

Теперь настроим nginx. Для быстрого старта достаточно в /etc/nginx/conf.d/ создать файл my_site.conf с примерно следующим содержимым:

server {
    listen 80;
    server_name my_wonderful_site.in www.my_wonderful_site.in;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080/;
    }

    location ~/\.ht {
        deny all;
    }
    location ~*\.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
        root /var/www/my_site/;
        }
}

Здесь кроме непосредственно обратного прокси, мы делаем ещё две полезные вещи — запрещаем отдавать пользователю файл .htaccess, например, и настраиваем отдачу статического содержимого нашим nginx-ом.

Осталась самая малость — научить apache писать в логи реальный ip вместо 127.0.0.1. Для этого нам нужно установить пакет httpd-devel и mod_rpaf (reverse proxy add forward). Последовательность действий для RedHat/CentOS такова:

yum install httpd-devel unzip
cd
mkdir mod_rpaf
cd mod_rpaf
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
unzip stable.zip
cd mod_rpaf_stable
make
make install

и создаём (редактируем) конфигурационный файл модуля /etc/httpd/conf.d/mod_rpaf.conf :

 

LoadModule              rpaf_module modules/mod_rpaf.so
RPAF_Enable             On
RPAF_ProxyIPs           127.0.0.1
RPAF_SetHostName        On
RPAF_SetHTTPS           On
RPAF_SetPort            On
RPAF_ForbidIfNotProxy   Off

Теперь проверим наши конфиги на ошибки:

service httpd configtest

Если получили OK — перезапускаем всю нашу связку:

service iptables restart
service httpd restart
service nginx restart

Если, опять таки, не получили ошибок — можем радостно наблюдать за свершениями:

tail -f /var/log/httpd/my_site.access.log

 

Помогла заметка - поделись с другом:
  1. Комментов пока нет

  1. Трэкбэков пока нет.

Оставьте эти два поля как есть:

 
Яндекс.Метрика