Nginx, часть 1: Начало

Date June 30th, 2010 Author Vitaly Agapov

— Не знал, что на небесах никуда без этого? Пойми, на небесах только и говорят, что о море. Как оно бесконечно прекрасно… О закате, который они видели…О том, как солнце, погружаясь в волны, стало алым как кровь. И почувствовали, что море впитало энергию светила в себя, и солнце было укрощено, и огонь уже догорал в глубине. А ты?… Что ты им скажешь? Ведь ты ни разу не был на море. Там наверху тебя окрестят лохом…

— «Достучаться до небес»

nginxНекоторые статистические данные показывают нам, что Nginx – это второй по популярности web-сервер в сети, держащий что-то около 35% рынка. Но мы-то с вами знаем, что на самом деле статистика эта собирается элементарным парсингом http-заголовков Server в ответах от серверов, и из этих 35% львиная доля Nginx’ов – это всего-навсего прокси-серверы, перекидывающие всю “нестатику” (удивительное дело!) спрятанному в бэк-энд Apache. Но стоит отметить, что как прокси-серверу Nginx’у практически нет равных (если, конечно, вам не хочется, например пообщаться с Tomcat’ом в бэк-энде по AJP13 – тут уж Nginx сядет в лужу), поэтому разберёмся с ним поближе.

В первой небольшой заметке по Nginx посмотрим, как Nginx поставить фронт-эндом перед Апачем и научить его отдавать статичный контент самостоятельно, оставив Апачу лишь разбираться с cgi. Преимущества такой схемы лежат на поверхности: мы разгрузим Apache за счет статики, а также за счет отсутствия необходимости поддерживать тред во время получения запроса и отправки ответа по медленному каналу. Плюс к этому, Nginx считается более легким и быстрым, чем Apache с его префорками, и скорее всего сможет дать выигрыш по скорости отдачи статичных элементов.

Если речь идёт об Ubuntu, то ставим Nginx из репозиториев:

$ sudo aptitude install nginx

Загвоздка здесь только одна – на момент написания статьи в официальных репах Ubuntu лежит Nginx версии 0.7.65. Если же хочется версию посвежее, то придётся либо собирать пакет вручную, либо воспользоваться сторонними репозиториями. Как вариант:

deb http://repo.dlocal.ru/nginx-repo/ubuntu/nginx8 lucid/

Перед запуском Nginx надо бы переселить Apache на какой-то порт, отличный от 80. Ну… пусть это будет порт 83. Для этого в конфиге (в сборке под Ubuntu это файл ports.conf) меняем в директиве Listen и NameVirtualHost порт 80 на 83. И, соответственно, в VirtualHost порт также указываем 83.

Далее смотрим в конфиг виртуального хоста в Nginx (опять же в Ubuntu он лежит в /etc/nginx/sites-enabled/default) и пилим его под свои нужды:

server {
        # Слушаем 80-й порт
        listen 80 default;
        # Здесь указываем доменное имя сайта или ip-адрес
        server_name localhost;
        access_log /var/log/nginx/access.log;

        location / {
           # Проксируем всё на 80-й порт
           proxy_pass http://127.0.0.1:83/;
           # Редиректа не делаем
           proxy_redirect off;
           # Подставляем заголовок Host из принятого запроса
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      
        # Статику не проксировать
        location ~* \.(jpg|jpeg|gif|png|ico|css|txt|tar|js)$ {
                root /var/www/cgi-bin;
        }
}

Ещё напоследок можно заглянуть в основной конфиг /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;
    # multi_accept on;
}

http {
    include /etc/nginx/mime.types;
    access_log /var/log/nginx/access.log;
    sendfile on;
    #tcp_nopush on;

    keepalive_timeout  65;
    tcp_nodelay on;
    # Спрячем версию nginx из заголовков Server
    server_tokens off;
    # Разрешим загрузку файлов объёмом до 4Мб
    client_max_body_size 4M;

    # Включаем модуль ngx_http_gzip_module
    gzip  on;
    # Минимальная длина ответа, при которой модуль будет архивировать, в байтах
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    # MIME-типы которые необходима архивация
    gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    # Степень сжатия gzip. 6 - достаточно оптимальное значение.
    gzip_comp_level 6;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Запускаем Nginx, смотрим, радуемся, идём за мороженым.

Ссылки:

http://sysoev.ru/nginx/
http://wiki.nginx.org

Tags:
Category: Linux, Nginx, Web-dev | No comments »

Comments

Leave a comment

 Comment Form