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) и пилим его под свои нужды:
01.
server {
02.
# Слушаем 80-й порт
03.
listen 80 default;
04.
# Здесь указываем доменное имя сайта или ip-адрес
05.
server_name localhost;
06.
access_log /var/log/nginx/access.log;
07.
08.
location / {
09.
# Проксируем всё на 80-й порт
10.
proxy_pass http://127.0.0.1:83/;
11.
# Редиректа не делаем
12.
proxy_redirect off;
13.
# Подставляем заголовок Host из принятого запроса
14.
proxy_set_header Host $host;
15.
proxy_set_header X-Real-IP $remote_addr;
16.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17.
}
18.
19.
# Статику не проксировать
20.
location ~* \.(jpg|jpeg|gif|png|ico|css|txt|
tar
|js)$ {
21.
root /var/www/cgi-bin;
22.
}
23.
}
Ещё напоследок можно заглянуть в основной конфиг /etc/nginx/nginx.conf:
01.
user www-data;
02.
# Количество рабочих процессов. Навскидку ставим по количеству ядер
03.
worker_processes 2;
04.
error_log /var/log/nginx/error.log;
05.
pid /var/run/nginx.pid;
06.
events {
07.
worker_connections 1024;
08.
# multi_accept on;
09.
}
10.
11.
http {
12.
include /etc/nginx/mime.types;
13.
access_log /var/log/nginx/access.log;
14.
sendfile on;
15.
#tcp_nopush on;
16.
17.
keepalive_timeout 65;
18.
tcp_nodelay on;
19.
# Спрячем версию nginx из заголовков Server
20.
server_tokens off;
21.
# Разрешим загрузку файлов объёмом до 4Мб
22.
client_max_body_size 4M;
23.
24.
# Включаем модуль ngx_http_gzip_module
25.
gzip
on;
26.
# Минимальная длина ответа, при которой модуль будет архивировать, в байтах
27.
gzip_min_length 1000;
28.
gzip_proxied any;
29.
gzip_disable
"MSIE [1-6]\.(?!.*SV1)"
;
30.
# MIME-типы которые необходима архивация
31.
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
32.
# Степень сжатия gzip. 6 - достаточно оптимальное значение.
33.
gzip_comp_level 6;
34.
35.
include /etc/nginx/conf.d/*.conf;
36.
include /etc/nginx/sites-enabled/*;
37.
}
Запускаем Nginx, смотрим, радуемся, идём за мороженым.
Ссылки:
http://sysoev.ru/nginx/
http://wiki.nginx.org
Tags: Nginx
Category:
Linux, Nginx, Web-dev |
No comments »