Руководство → Установка nginx как front-end к apache в Debian / Ubuntu
Рано или поздно перед администратором встает задача разгрузить back-end, которым как правило, является apache. Одной из альтернатив для front-end является легкий web сервер Nginx. Данная конфигурация дает особенно большой выигрыш при наличии подключений по медленным каналам связи (модем), так как ресурсы системы начинают использоваться для дела, а не ждать, пока будет получен запрос или отдан ответ клиенту.
В случае же front-end/back-end конфигурации ситуация немного иная: front-end ( в нашем случае, nginx) полностью обрабатывает входящий запрос, используя при этом минимум системных ресурсов. Передает запрос back-end'у (apache), быстро получает ответ и начинает передачу ответа клиенту. Таким образом, ресурсы, занятые под apache, были использованы только для того, чтобы сгенерировать запрошенный контент, и были сразу возвращены системе после завершения работы. А с клиентом общается лишь легкий и не требовательный к ресурсам front-end nginx.
Общий вид схемы front-end/back-end
В общем виде, http-соединение будет проделывать следующий путь:
В данном случае, fron-end и back-end располагаются на одной машине. В общем же случае, при необходимости они могут работать на разных машинах.
Запускаем nginx:
Набираем в браузере: «192.168.0.1» (IP той машины, где был установлен nginx). Должно появиться приглашение nginx:
Корректируем конфигурационный файл:
Должен иметь приблизительно следующий вид:
Останавливаем nginx:
Создаем файл конфигурации proxy.conf:
Должен иметь следующий вид:
Файл следующего вида:
Включаем новый хост:
Настройка Apache
Корректируем конфигурационный файл:
Необходимо найти и скорректировать следующие строки (при отсутствии добавить):
Перезагружаем apache:
Проверяем корректную настройку apache, открываю в браузере: «192.168.0.1» (IP той машины, где был установлен apache). Должно появиться «It works!».
Отключаем хост по умолчанию:
Настраиваем apache на работу с портом 8080, а не 80:
Должен иметь вид:
Перезагружаем apache, nginx:
Настройка mod_rpaf
Теперь, если посмотреть в логи apache, то там все запросы будут идти с адреса front-end'a. Чтобы это исправить, необходимо установить модуль mod_rpaf:
И настроить его:
Должен выглядеть примерно так:
Перезагружаем apache:
Настройка виртуального хоста в Apache
Создаем файл виртуального хоста:
Приблизительно следующего содержания:
С описанием правил настройки виртуальных хостов для apache можно ознакомится, например, тут
Включаем новый хост:
Преимущества архитектуры front-end/back-end
В случае использования только apache, при наличии медленных подключений, последний бОльшую часть времени просто ждет, либо пока будет полностью получен запрос, либо пока будет полностью передан ответ клиенту. При этом под каждое соединение будет выделено определенное количество памяти, и, как не трудно догадаться, общее количество одновременных подключений будет прямо пропорционально доступному объему памяти.В случае же front-end/back-end конфигурации ситуация немного иная: front-end ( в нашем случае, nginx) полностью обрабатывает входящий запрос, используя при этом минимум системных ресурсов. Передает запрос back-end'у (apache), быстро получает ответ и начинает передачу ответа клиенту. Таким образом, ресурсы, занятые под apache, были использованы только для того, чтобы сгенерировать запрошенный контент, и были сразу возвращены системе после завершения работы. А с клиентом общается лишь легкий и не требовательный к ресурсам front-end nginx.
Общий вид схемы front-end/back-end
В общем виде, http-соединение будет проделывать следующий путь:
HTTP Client ----> Front-End (nginx) ----> Back-End (apache) ----------- <---- ----------------- <---- ----------------- 1.2.3.4:80 192.168.0.1:80 192.168.0.1:8080
В данном случае, fron-end и back-end располагаются на одной машине. В общем же случае, при необходимости они могут работать на разных машинах.
Установка и настройка Nginx
Установка Nginx
Установка Nginx тривиальна, начиная с Lenny (5.0). До этого, чтобы поставить nginx версии 0.6 и выше, необходимо было собирать пакет вручную.$ sudo aptitude install nginx
Запускаем nginx:
$ sudo /etc/init.d/nginx start
Набираем в браузере: «192.168.0.1» (IP той машины, где был установлен nginx). Должно появиться приглашение nginx:
"Welcome to nginx!".
Настройка проксирования в Nginx
Отключаем сайт по умолчанию:$ sudo rm /etc/nginx/sites-enabled/default
Корректируем конфигурационный файл:
$ sudo vim /etc/nginx/nginx.conf
Должен иметь приблизительно следующий вид:
# пользователь, от которого запускается процесс user www-data; # кол-во рабочих процессов. Обычно равно кол-ву ядер на машине worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; tcp_nopush on; keepalive_timeout 2; tcp_nodelay on; gzip on; gzip_comp_level 3; gzip_proxied any; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Останавливаем nginx:
$ sudo /etc/init.d/nginx stop
Создаем файл конфигурации proxy.conf:
$ sudo vim /etc/nginx/proxy.conf
Должен иметь следующий вид:
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 64k;
Настройка виртуального хоста в Nginx
Создаем файл виртуального хоста:$ sudo vim /etc/nginx/sites-available/debianworld.ru
Файл следующего вида:
upstream backend { # Адрес back-end'a server 192.168.0.1:8080; } server { listen 80; server_name www.debianworld.ru debianworld.ru; access_log /home/site/debianworld.ru/logs/nginx_access.log; error_log /home/site/debianworld.ru/logs/nginx_error.log; # Перенаправление на back-end location / { proxy_pass http://backend; include /etc/nginx/proxy.conf; } # Статическиое наполнение отдает сам nginx # back-end этим заниматься не должен location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ { root /home/site/debianworld.ru/static/; } }
Включаем новый хост:
$ sudo ln -s /etc/nginx/sites-available/debianworld.ru /etc/nginx/sites-enabled/debianworld.ru
Установка и настройка Apache
Установка Apache
Установка проста:$ sudo aptitude install apache2
Настройка Apache
Корректируем конфигурационный файл:
$ sudo vim /etc/apache2/apache2.conf
Необходимо найти и скорректировать следующие строки (при отсутствии добавить):
# Таймаут 90 секунд Timeout 90 # Выключаем KeepAlive KeepAlive Off # Имя сервера ServerName debianworld.ru
Перезагружаем apache:
$ sudo apache2ctl graceful
Проверяем корректную настройку apache, открываю в браузере: «192.168.0.1» (IP той машины, где был установлен apache). Должно появиться «It works!».
Отключаем хост по умолчанию:
$ sudo a2dissite 000-default
Настраиваем apache на работу с портом 8080, а не 80:
$ sudo vim /etc/apache2/ports.conf
Должен иметь вид:
NameVirtualHost *:8080 Listen 8080
Перезагружаем apache, nginx:
$ sudo apache2ctl graceful $ sudo /etc/init.d/nginx start
Настройка mod_rpaf
Теперь, если посмотреть в логи apache, то там все запросы будут идти с адреса front-end'a. Чтобы это исправить, необходимо установить модуль mod_rpaf:
$ sudo aptitude install libapache2-mod-rpaf
И настроить его:
$ sudo vim /etc/apache2/mods-enabled/rpaf.conf
Должен выглядеть примерно так:
<IfModule mod_rpaf.c> # Включаем модуль RPAFenable On # Приводит в порядок X-Host RPAFsethostname On # Адрес фронтенда (nginx) RPAFproxy_ips 127.0.0.1 192.168.0.1 </IfModule>
Перезагружаем apache:
$ sudo /etc/init.d/apache2 force-reload
Настройка виртуального хоста в Apache
Создаем файл виртуального хоста:
$ sudo vim /etc/apache2/sites-available/debianworld.ru
Приблизительно следующего содержания:
<VirtualHost *:8080> # Осн. настройки домена ServerAdmin admin@debianworld.ru ServerName www.debianworld.ru ServerAlias debianworld.ru <Directory /home/site/debianworld.ru/apache/> Order deny,allow Allow from all </Directory> LogLevel warn ErrorLog /home/site/debianworld.ru/logs/apache_error.log CustomLog /home/site/debianworld.ru/logs/apache_access.log combined # Остальные настройки # ... </VirtualHost>
С описанием правил настройки виртуальных хостов для apache можно ознакомится, например, тут
Включаем новый хост:
$ sudo a2ensite <domain name> $ sudo /etc/init.d/apache2 reload
- +1
- android
- 27 августа 2010, 10:32
Комментарии (0)
rss свернуть / развернутьТолько авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.