Skip to content

Настройка Nginx в качестве frontend к Apache

И так в вкратце что такое nginx? nginx – быстрый и легкий, но очень мощный и эффективный web-сервер, созданный Игорем Сысоевым для использования на серверах компании Рамблер и любезно предоставленный им для использования open-source сообществом. Этот сервер может использоваться как самостоятельный HTTP-сервер или как reverse proxy (frontend) перед веб-сервером Apache или любым другим “тяжелым” веб сервером для снижения нагрузки на backend-сервере от большого количества одновременных HTTP-сессий. В основном nginx используют в связки frontend – backend с Apache, иными словами если идет запрос на получение статичного файла (изображение, CSS или JavaScript), то nginx самостоятельно обрабатывает этот запрос. Если же пользователь обращается к какому-либо скрипту, тогда nginx передает этот запрос на обслуживание к Apache.

На этом покончим с теорией (ее на просторах интернета предостаточно) и приступим к реализации связки nginx-Apache на ОС CentOS/RHEL.

В данном описании я подразумеваю что у вас уже установлен и настроен сервер Apache!

1. Для установки nginx подключаем дополнительный репозиторий пакетов EPEL:

[root@centos ~]#  rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

2. Проверим активен ли пакет EPEL при помощи команды - yum repolist

epel

Если строка подчеркнутая красным у вас присутствует значит все в порядке, если ее нет, то репозиторий EPEL надо активировать путем редактирования конфигурационного файла:

[root@centos ~]# vi /etc/yum.repos.d/epel.repo

В самом верху находим строчку - enable, и ставим вместо нуля, цифру 1, сохраняем и выходим.

epel1

3. Теперь у нас все готово для установки nginx:

[root@centos ~]# yum install nginx

Кстати в репозитории epel лежит не очень свежая версия nginx (0.6), если вы хотите установить последнюю версию то необходимо подключить репозиторий CentAlt (но помните CentAlt для работы требует подключенного репозитория epel, поэтому вам его в любом случае придется подключить):

rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

или для 64 битной ОС:

rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

4. Установив nginx приступим к установке модуля для Apache, под названием – mod_rpaf. Вкратце для чего он нужен. Все запросы к Apache приходят с ip адреса на котором работает nginx (порт 80), соответственно в журнальных файлах Apache будет фигурировать только ip адрес nginx сервера, что не совсем корректно. Также без использования данного модуля начнутся проблемы со скриптами в которых используется ip адрес посетителя и перестанет правильно работать механизм ограничения доступа по ip адресам с помощью .htacces. Иными словами данный модуль крайне важен и необходим.

Для начала скачаем модуль к себе на сервер (Кстати, вот тут нам и пригодится репозиторий CentAlt, если не хотите  конечно собирать этот модуль из сырцов)):

[root@centos ~]# rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Установим модуль:

[root@centos ~]# yum   install  mod_rpaf

5. Приступаем к настройке nginx.

user  nginx;   #укажем пользователя, от имени которого будет работать nginx

Кстати, многие советуют ставить пользователя nobody, но у меня после установки nobody, стала некоректна работать админка в WordPress!

worker_processes  2;   #Теперь скажем nginx-у, какое количество рабочих процессов породить. Обычно, хорошим выбором бывает число процессов, равное числу процессорных ядер в вашем сервере, но я рекомендую умножать число ядер на 2.
error_log  /var/log/nginx/error.log debug;  #куда будут сыпаться логи об ошибках
pid        /var/run/nginx.pid;
worker_rlimit_nofile 80000;
events {
worker_connections  2048;  # Общее максимальное количество обслуживаемых клиентов будет равно worker_processes * worker_connections; Иногда могут сработать в положительную сторону даже самые экстремальные значения, вроде 128 процессов, по 128 коннектов на процесс, или 1 процесса, но с параметром worker_connections=16384. В последнем случае, впрочем, скорее всего понадобится тюнить ОС.
use epoll;
}

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
log_format  main  ‘$remote_addr – $remote_user [$time_local] $status ‘
‘»$request» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «http_x_forwarded_for»‘;
access_log  /var/log/nginx/access.log  main;
sendfile        on;
tcp_nopush     on;
tcp_nodelay    on;

Описываем хосты

server {
listen       88.88.88.11:80;  #IP и порт на котором слушает nginx
server_name     mysite.ru www.mysite.ru;  #указываем имена нашего сайта
server_name_in_redirect  off;
access_log  /var/log/nginx/host.access.log  main;
location / {
proxy_pass         http://127.0.0.1:8080/;  #указываем ip  и порт на котором теперь будет слушать Apache
proxy_redirect     off;
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
client_max_body_size       10m;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 10m;
}

# Определяем местонахождение и расширения статичных файлов
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root   /home/www/mysite.ru;
}

# htaccess и htpasswd не отдаем
location ~ /\.ht {
deny  all;
}
}

}

Данный конфигурационный файл создан только для одного виртуального сайта (хоста), если же у вас их несколько, то имеет смысл описывать все виртуальные хосты в virtual.conf, который расположен по адресу /etc/nginx/conf.d/virtual.conf

Привожу простой пример:

##site.new.ru
server {
listen 127.0.0.1:80;
server_name site.new.ru www.site.new.ru;
...
location ~* ^.+\.(js|gif|jpg)$ {
root /home/www/
site.new.ru;
}
}
##site.ru
server {
listen 127.0.0.1:80;
server_name site.ru www.site.ru;
...
location ~* ^.+\.(js|gif|jpg)$ {
root /home/www/site.ru;
}
}

На этом  настройку nginx можно считать законченной.

Корректность настройки на предмет ошибок проверяем командой:

[root@centos ~]# nginx -t

6. Приступим к настройке Apache. В файле конфигурации  - /etc/httpd/conf/httpd.conf найдите строку
Listen :80 и укажите новый порт на котором будет работь Apache -  Listen  127.0.0.1:8080

Далее отредактируйте ваши виртульные хосты в соответсвии с новым портом:

NameVirtualHost 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /home/www/mysite.ru/
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>

7. Настраиваем модуль mod_rpaf длч работы с Apache.

7.1 Добавляем в конфигурационный файл Apache, следующие строки:

RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 88.88.88.10 127.0.0.1
RPAFheader X-Real-IP

7.2 Следующий шаг активация модуля. Сделать это можно двумя путями:

Первый путь добавить строчку LoadModule rpaf_module modules/mod_rpaf-2.0.so , в конфигурационный файл Apache, но при этом удалить (переименовать) файл mod_rpaf.conf из папки /etc/httpd/conf.d.

Второй путь отредактировать указанный выше файл – mod_rpaf.conf, добавления туда строки -

LoadModule rpaf_module modules/mod_rpaf-2.0.so (существующую строку редактируем или удаляем)

Оба пути являются правильными.

8. Запускаем (или рестартуем) все сервисы:

[root@centos ~]# service httpd start

[root@centos ~]# service nginx start

Естественно ошибок быть не должно, если есть ошибки изучаем логи nginx и Apache.

Полезные команды Nginx:

Проверка синтаксиса в конфигурационном файле nginx:

nginx -t

Смотрим какая версия nginx у нас установлена:

nginx -v

Расширенная информация с какими опциями собран nginx:

nginx -V

На этом настройка nginx закончена.

P.S. На личном примере я убедился в полезности nginx, установив его на свой сервер.  По результатам с сайта проверки времени отклика вашего сайта http://tools.pingdom.com/, я сократил время загрузки своих страниц в среднем на 1-2 секунды.


При создании статьи использовалась информация с сайтов:

http://www.it-tales.ru/

http://server-tuning.info/nginx/apache-frontend.html

http://www.opennet.ru/base/net/nginx_ipb.txt.html

http://server-tuning.info/nginx/about-nginx.html

http://habrahabr.ru/blogs/nginx/66764/

http://blogdr.ru/nginx-apache-virtualdomain/

Полезные сайты:

Официальный сайт Nginx

Установка nginx на ОС FreeBSD

Read more from Linux
2 комментария Post a comment
  1. Апр 2 2010

    Хороший пост. Особенно понравилось что комментарии красным цветом выделены, так легче ориентироваться.
    Но вот в других статьях про настройку Nginx есть ешё в конфиге идет настройка error_page – обработка ошибок, а у вас нету. Или по вашему это не нужно?

  2. admin
    Апр 3 2010

    Спасибо!) Про страницу ошибок как то не задумывался, спасибо что подсказали, надо будет отредактировать статью…

Share your thoughts, post a comment.

Есть что сказать? Оставьте Ваш комментарий!
  1. (required)
  2. (valid email required)
  3. (required)
  4. Отправить
  5. Captcha
 

cforms contact form by delicious:days