четверг, 24 апреля 2014 г.

Установка nginx как front-end к apache в Debian

Рано или поздно перед администратором встает задача разгрузить back-end, которым как правило, является apache. Одной из альтернатив для front-end является легкий web-серверNginx. Данная конфигурация дает особенно большой выигрыш при наличии подключений по медленным каналам связи (модем), так как ресурсы системы начинают использоваться для дела, а не ждать, пока будет получен запрос или отдан ответ клиенту.


Преимущества архитектуры 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.1.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
Набираем в браузере: http://192.168.1.1 (IP той машины, где был установлен nginx). Должно появиться приглашение nginx: "Welcome to nginx!".

Настройка проксирования в Nginx
Отключаем сайт по умолчанию:
sudo rm /etc/nginx/sites-enabled/default
Корректируем конфигурационный файл:
sudo nano /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 nano /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 nano /etc/nginx/sites-available/debian-blog.ru
Файл следующего вида:
upstream backend {
  # Адрес back-end’a
  server 192.168.1.1:8080;
}
server {
    listen   80;
    server_name www.debian-blog.ru debian-blog.ru;
    access_log /home/site/debian-blog.ru/logs/nginx_access.log;
    error_log /home/site/debian-blog.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/debian-blog.ru/static/;
    }
}
Включаем новый хост:
sudo ln -s /etc/nginx/sites-available/debian-blog.ru /etc/nginx/sites-enabled/debian-blog.ru

Комментариев нет :

Отправить комментарий