База знаний Clodo.ru
Перейти на сайт clodo.ru

Поиск по базе знаний
База знаний :: Web Server :: Web server (Nginx+Apache2) :: CentOS 5, Debian Squeeze

Установка и настройка Web-сервера (Linux+Nginx+Apache2)

Связка двух веб-серверов, один из которых выполняет функцию фонтенда(Nginx), другой - бэкенда (Apache2), предназначена для снижения общей нагрузки на сервер. Достигается это за счет того, что более легкий и не обремененный дополнительным функционалом Nginx первым принимает все запросы пользователей. Он самостоятельно выдает по запросам статический контент, не озадачивая этой функцией тяжеловесный Apache2, который, в свою очередь, обрабатывает динамический контент. Apache2 не работает напрямую с пользователем, все их запросы проксируются Nginx, и ему же возвращаются ответы. Так достигается разделение труда: Nginx освобождает Apache от необходимости "общаться" с множеством пользователей и обрабатывать запросы на статику, которая составляет большую часть исходящего трафика. Apache не создает множества дочерних процессов, потребляющих оперативную память. Данная связка часто применяется для обеспечения работы крупных ресурсов с большой посещаемостью. Для ресурсов с маленькой посещаемостью такая связка не даст ощутимого прироста производительности.

Если Вы являетесь пользователем ISPmanager, нижеизложенная информация пригодится Вам лишь для ознакомления. Его функционал позволяет создать такую связку достаточно быстро и без манипуляции с командной строкой. Недостаток лишь в том, что ISPmanager не позволяет произвести более тонкую настройку, и даже если вручную внести дополнительные коррективы в конфигурацию, созданную ISPmanager, после первой же перезагрузки он перепишет конфигурацию по-своему. Данная конфигурация сбалансирована для выполнения самого широкого круга задач, и одна из функций ISPmanager - ее поддерживать.

Данный мануал был протестирован на CentOS 5.6 и Debian Squeeze. Связка работает в том же виде и на других дистрибутивах, но по причине наибольшей популярности первых, мы будем говорить именно о них. Основная часть данной статьи посвящена CentOS, но различия с Debian заключаются только в названиях пакетных менеджеров и нескольких незначительных моментах. Все особенности установки для Debian описаны в заключительной части данной статьи. Команды и примеры файлов конфигурации, не указанные в этом разделе, подходят для обеих систем.

Установка nginx

Для того, чтобы установить Nginx, нам понадобится репозиторий EPEL. В принципе, данный пакет есть и в основном репозитории CentOS, но в EPEL пакет собран с ключом enable_rpaf, дающим возможность посредством rpaf-модуля взаимодействовать нашей будущей связке. Чтобы подключить EPEL, введем в консоли:

$ rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

Если на сервере установлена 64-битная система - команда будет немного другой:

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

Далее сама установка:

$ yum install nginx

Для Debian/Ubuntu достаточно просто установить пакет nginx командой:

$ apt-get install nginx

Теперь, если в браузере ввести IP-адрес сервера, он покажет тестовую страницу Nginx

Конфигурация Nginx

Следующий этап - изменение файла конфигурации Nginx*. Наш конфиг файл должен выглядеть примерно так:

user www-data;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
worker_rlimit_nofile 80000;
events {
worker_connections 2048;
}

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;

server {
listen 88.88.88.11:80;
# 88.88.88.11 нужно заменить на IP Вашего сервера
server_name mysite.ru www.mysite.ru;
#Здесь и далее вместо 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/;
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;
proxy_connect_timeout 90;
}
#Эта секция отвечает за местонахождение и типы статичных файлов, обрабатываемых Nginx. Динамические файлы мы будем отсылать на Apache
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /var/www/mysite.ru;
}
}

Установка Apache2

В списке пакетов для CentOS Apache2 значится как httpd, потому:

yum install httpd

Для Debian/Ubuntu установить apache нужно командой:

$ apt-get install apache2

Приводим соответствующую часть файла конфигурации Apache /etc/httpd/conf/httpd.conf к такому виду:

Listen 127.0.0.1:8080
NameVirtualHost 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
#В этой строке указывается адрес почтового ящика администратора сервера, т. е. Ваш. Имя-пример "mysite.ru" здесь и далее необходимо заменить на имя Вашего сайта
ServerAdmin webmaster@mysite.ru
DocumentRoot /var/www/mysite.ru/
ServerName mysite.ru
ErrorLog logs/mysite.ru-error_log
CustomLog logs/mysite.ru-access_log common
</VirtualHost>

Установка rpaf-модуля

Он служит для передачи нашему backend, в данном случае, Apache, сведений об ip-адресе. Без использования данного модуля могут быть проблемы со скриптами, в которых используется ip адрес посетителя и перестанет правильно работать механизм ограничения доступа по ip адресам с помощью .htaccess.

Получаем пакет:

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

Отключаем репозиторий, чтобы система не «притащила» ненужных нам обновлений пакетов

vim /etc/yum.repos.d/centalt.repo

Выставляем enabled=0

Устанавливаем пакет:

yum -y --enablerepo=CentALT install mod_rpaf

Установка на Debian/Ubuntu проста. Необходимо всего лишь выполнить команды:

$ apt-get install libapache2-mod-rpaf
$ a2enmod rpaf

Настройка rpaf-модуля

Откроем файл конфигурации Apache2 и допишем в конец файла следующие строки:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP

После всех описанных манипуляций перезапустим Apache и Nginx

CentOS

$ service httpd restart && service nginx restart

Debian/Ubuntu:

$ /etc/init.d/apache2 restart

Напоминаем, что полная перезагрузка Вашего сервера в данном случае не обязательна.

Теперь связка работает, Nginx обрабатывает статичные данные, Apache -динамические.

Обращаем Ваше внимание, что данный пример настройки действителен для одного хоста. В случае наличия более чем одного сайта, содержимое файлов конфигурации будет отличаться.

Условия использования документа

Материал представленный на данной странице может быть использован Вами по своему усмотрению. Разрешается копирование и распространение предоставленного материала без изменения содержания и без предварительного уведомления администрации Clodo.ru.

Мы будем признательны Вам за сообщения об ошибках в представленной документации и за предложения об улучшении документации. По этим вопросам необходимо обращаться по адресу mail@clodo.ru. При обращении не забывайте указывать URL-адрес публикации.