Nginx, часть 1: Начало
Date June 30th, 2010 Author Vitaly Agapov
— «Достучаться до небес»
Некоторые статистические данные показывают нам, что 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: Nginx
Category:
Linux, Nginx, Web-dev |
No comments »