Nginx – Маленький, Но Очень Мощный И Эффективный Web-Сервер
Сегодня я хотел бы рассказать об еще одном полезном инстументе, который я использую в моей администраторской практике. Этот инструмент – nginx – маленький и легкий, но очень мощный и эффективный web-сервер, созданный Игорем Сысоевым для использования на серверах компании Рамблер и любезно предоставленный им для использования open-source сообществом. Этот сервер может использоваться как самостоятельный HTTP-сервер или как reverse proxy перед Апачем или любым другим “тяжелым” веб сервером для снижения нагрузки на backend-сервере от большого количества одновременных HTTP-сессий. Как самостоятельный сервер, nginx без проблем выдерживает огромные нагрузки при раздаче статического контента (images, html-pages и т.д.).
Основные возможности nginx:
- обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов;
- акселерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость;
- акселерированная поддержка удалённых FastCGI серверов, простое распределение нагрузки и отказоустойчивость;
- модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, SSI-фильтр; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно.
- поддержка SSL;
Дополнительные возмодности сервера:
- виртуальные сервера, определяемые по ip-адресу и имени;
- поддержка keep-alive и pipelined соединений;
- гибкость конфигурации на уровне Apache, настройка таймаутов и размеров буферов;
- изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
- настройка форматов логов, быстрая ротация логов;
- специальные страницы для ошибок 400-599;
- изменение URI с помощью регулярных выражений;
- выполнение разных функций в зависимости от адреса клиента;
- ограничение доступа в зависимости от адреса клиента и по паролю (Basic аутентификация);
- ограничение скорости отдачи ответов;
Основные архитектурные особенности nginx:
- один главный процесс и несколько рабочих, рабочие процессы работают под непривилегированным пользователем;
- поддержка kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select и poll;
- использование возможностей, предоставляемых kqueue, таких как EV_CLEAR, EV_DISABLE (для временного выключения события), NOTE_LOWAT, EV_EOF, число доступных данных, коды ошибок;
- поддержка sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+) и sendfilev (Solaris 8 7/01+);
- поддержка accept-фильтров (FreeBSD 4.1+) и TCP_DEFER_ACCEPT (Linux 2.4+);
- на 10 000 неактивных keep-alive соединений расходуется около 2.5M памяти;
- минимум операций копирования данных;
Как экспериментальная возсожность, в nginx включен интерпретатор языка perl для программирования особо сложной логики обработки запросов.
Конкретно в моей работе я использую это ПО как основной веб-сервер при построении бесплатных хостингов. Я разработал несколько специфичных модулей для добавления банеров и учета статистики посещения страниц и сейчас один их наших главных серверов способен выдержать нагрузку в 150-200Mbit/s сильно “фрагментированного” трафика (все запрашиваемые файлы маленькие). Я думаю, что это хороший результат, т.к. раньше на этом же сервере Apache даже при всех возможных оптимизациях не мог обработать более 60-80Mbit/s.
Мне кажется, что одной из важных проблем nginx является отсутствие англоязычной документации, сдерживающее использование такого полезного инструмента в работе иностранных администраторов. Насколько мне известно, автор достаточно сильно занят и не собирается заниматься переводом документации до момента выхода финальной стабильной версии. Я же надеюсь, что дал Вам базовую информацию о том, что такое nginx и почему мне кажется, что это лучший из легковесных http-серверов в мире.
Related posts:
- Обзор Типичных Конфигураций Для Nginx
- Сбор Статиcтики О Работе Сервера nginx При Помощи rrdtool
- Использование Nginx Как Reverse-Proxy Сервера На Загруженных Сайтах
- Как клонировать виртуальную машину при использовании VmWare Server
- Как получить “не зависящий от провайдера” IP-адрес для домашнего сервера?

18 Responses to this entry
Consider trying lighttpd then. Very similar capabilities – more features – better documentation.
I’ve tried to use it and have compared it with nginx. Its performance is very poor comparing to nginx. Nginx uses very efficient connection handling algorithms and that is why it is more preferable for high loads.
That would be rather weird, since if your web page is correct they use exactly the same system: epoll on Linux 2.6, kqueue on FreeBSD, etc…
Is there some English documentation on how to set up nginx to serve PHP+FastCGI? I’m interested in some benchmarking.
I will post sample configuration for nginx+php+fcgi there tomorrow.
Thanks for the great write up!
I would be really interested to see your configuration. Can it compress dynamic content? Do you use it as a front end to apache or as a standalone web server?
How did it compare to lighttpd number wise?
[...] In one of my previous posts I have described very powerful Unix admin tool – Nginx. As I said, main problem of this server is lack of English documentation. That is why I decided to write this post with list of typical nginx configurations and example configuration snippets for these configurations. [...]
[...] After my first post about nginx web and reverse-proxy server, I have received many e-mail comments and questions. One of the most popular questions was “How to use PHP with nginx?”. This small howto-like article is about how to do it. [...]
Alexey,
As I’m sure you know already, some of us have set up a wiki for Nginx and are working on getting English, and German translations completed and the Russian documention ported:
http://wiki.codemongers.com/Nginx
Hope this helps others give Nginx a try.
[...] Homo-Adminus Blog » Nginx – Small, But Very Powerful and Efficient Web Server [...]
I am trying to install nginx to act as a reverse proxy on a Linksys NSLU2 with Unslung 5.5 Linux operating system.
I have followed the tutorial here:
http://www.nslu2-linux.org/wiki/HowTo/ReverseProxy
and all is well until I get to the part where I modify the nginx.conf file to add the Cherokee server as per the tutorial extract below:
>>
At this point of the proceedings I should be able to see the Cherokee server at
:7007/cherokee/
but no luck.
I am also trying to proxy the web interface of my router at 192.168.1.254
Similarly for the router page at
:7007/router/
My nginx.conf file is as shown below.
Have I added the proxy lines to the config file correctly?
Thanks for your help.
************************
My nginx.conf file.
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include conf/mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#gzip on;
server {
#listen 80;
listen 7007;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#proxy Cherokee
location /cherokee/ {
proxy_pass http://127.0.0.1:8008;
proxy_redirect default;
}
#proxy Router
location /router/ {
proxy_pass http://192.168.1.254:80;
proxy_redirect default;
}
}
}
Hey, I am thinking about using nginx as a reverse proxy in front of Tomcat. Have anyone done it before ?
Алексей, добрый день.
Возникла проблема и решения пока не нашёл.
Загружаю файл *.asf который после аплоада обрабатывается mencoder’ом, но после того как файл закинут на сервер и начата обработка менкодером, сервер выдаёт 504ю ошибку.
как с этим можно бороться?
[...] Nginx – Small, But Very Powerful and Efficient Web Server (tags: nginx web sysadmin ruby rails blog) [...]
Скажите, какой максимальный размер отдаваемого статического файла?
[...] suplimentara la : http://nginx.net/ http://blog.kovyrin.net/2006/04/04/nginx-small-powerful-web-server/ http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/ [...]
[...] Nginx – Small, But Very Powerful and Efficient Web Server [...]
Так все-таки – как эффективнее использовать Nginx – в связке с апачем как фронтэнд или как замена апача?
Если можно – опишите какую версию nginx Вы используете на том сервере который показал способность держать 150-200Mbit/s и какая у Вас конфигурация nginx, и, если можно, желаза.
С уважением,
Денис
[...] software for free hosting platforms. I have developed specific modules for banner inserting …http://blog.kovyrin.net/2006/04/04/nginx-small-powerful-web-server/www.<b>nginx</b>.eu/download/sources/CHANGES-0.5.txt… only using non-buffered proxy, then [...]