Nginx: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Сменил катгорию на незавершенные статьи свободного ПО
Строка 61: Строка 61:


По данным Netcraft за апрель 2008 года число сайтов, обслуживаемых nginx превысило [[Миллион|миллион]] [http://survey.netcraft.com/Reports/200804/], что делает его шестым по популярности [[веб-сервер]]ом в мире.
По данным Netcraft за апрель 2008 года число сайтов, обслуживаемых nginx превысило [[Миллион|миллион]] [http://survey.netcraft.com/Reports/200804/], что делает его шестым по популярности [[веб-сервер]]ом в мире.

По данным Netcraft за июнь 2008 года число сайтов, обслуживаемых nginx превысило 2 [[Миллион|миллиона]] [http://survey.netcraft.com/Reports/200806/], что делает его четвертым по популярности [[веб-сервер]]ом в мире.


== См. также ==
== См. также ==

Версия от 10:22, 4 июня 2008

nginx
Логотип программы nginx
логотип nginx
Тип Веб-сервер, почтовый прокси-сервер
Автор NGINX, Inc.[вд]
Разработчик Игорь Сысоев
Написана на Си[3]
Операционная система Unix‐подобные
Первый выпуск 4 октября 2004[1]
Последняя версия 0.6.31 (12 мая 2008)
Тестовая версия 0.7.1 (26 мая 2008)
Репозиторий github.com/nginx/nginx
Лицензия BSD-like
Сайт www.nginx.ru
Логотип Викисклада Медиафайлы на Викискладе

nginx (engine x) — это свободный Веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, GNU/Linux, Solaris, Mac OS X).

Разрабатывается Игорем Сысоевым с 2002-го года для компании Rambler и постоянно модернизируется. Осенью 2004 года вышел первый публично доступный релиз.

Основные функции

HTTP-сервер

  • обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кеш дескрипторов открытых файлов
  • акселлерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость
  • акселлерированная поддержка FastCGI и memcached серверов, простое распределение нагрузки и отказоустойчивость
  • модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, HTTP-аутентификация, SSI-фильтр
  • несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно
  • поддержка SSL
  • экспериментальная поддержка встроенного Perl

IMAP/POP3-прокси сервер

  • перенаправление пользователя на IMAP/POP3-бэкенд с использованием внешнего HTTP-сервера аутентификации
  • простая аутентификация (LOGIN, USER/PASS)
  • поддержка SSL и StartTLS

Архитектура

В nginx рабочие процессы обслуживают одновременно множество соединений, мультиплексируя их вызовами операционной системы select, epoll (Linux) и kqueue (FreeBSD). Рабочие процессы выполняют цикл обработки событий от дескрипторов (см. Событийно-ориентированное программирование). Полученные от клиента данные разбираются с помощью конечного автомата. Разобранный запрос последовательно обрабатывается цепочкой модулей, задаваемой конфигурацией. Ответ клиенту формируется в буферах, которые хранят данные либо в памяти, либо указывают на отрезок файла. Буфера объединяются в цепочки, определяющие последовательность, в которой данные будут переданы клиенту. Если операционная система поддерживает эффективные операции ввода-вывода, такие как writev и sendfile, то nginx применяет их по возможности.

Конфигурация HTTP-сервера nginx разделяется на виртуальные серверы (директива server). Виртуальные серверы разделаются на location'ы (location). Для виртуального сервера возможно задать адреса и порты, на которых будут приниматься соединения, а так же имена, которые могу включать * для обозначения произвольной последовательности в первой и последней части, либо задаваться регулярным выражением.

location'ы могут задаваться точным URI, частью URI, либо регулярным выражением. location'ы может быть сконфигурирован для обслуживания запросов из статического файла, проксирования на http-бакэнд или fastcgi-бакэнд.

Для эффективного управления памятью nginx использует пулы. Пул — это последовательность предварительно выделенных блоков динамической памяти. Длина блока варируется от 1 до 16 килобайт. Изначально под пул выделается только один блок. Блок разделяется на занятую область и незанятую. Выделение мелких объектов выполняется путем продвижения указателя на незанятую область с учетом выравнивания. Если незанятой области во всех блоках нехватает для выделения нового объекта, то выделяется новый блок. Если размер выделяемого объекта превышает значение константы NGX_MAX_ALLOC_FROM_POOL, либо длину блока, то он полностью выделяется из кучи.

Таким образом, мелкие объекты выделяются очень быстро и имеют накладные расходы только на выравнивание.

nginx содержит модуль географической классификации клиентов по IP-адресу. В его основу входит база данных соответствия IP-адресов географическому региону, представленную в виде Radix tree в оперативной памяти. nginx предварительно распределяет первые несколько уровней дерева, таким образом, чтобы они занимали ровно 1 страницу памяти. Это гарантирует, что при поиске IP-адреса для первых нескольких узлов при трансляция адреса всегда найдется запись в TLB.

Популярность

По данным исследования Алексея Тутубалина за март 2007 года nginx активно набирал популярность среди используемых в рунете Web-серверов с долей в 22,7 % (по сравнению с 9,8 % в марте 2006 года).

По данным Netcraft за январь 2008 года популярность nginx на мировом уровне составила 0,5 %.

По данным Netcraft за апрель 2008 года число сайтов, обслуживаемых nginx превысило миллион [1], что делает его шестым по популярности веб-сервером в мире.

По данным Netcraft за июнь 2008 года число сайтов, обслуживаемых nginx превысило 2 миллиона [2], что делает его четвертым по популярности веб-сервером в мире.

См. также

Ссылки

  1. http://nginx.org/ru/CHANGES.ru
  2. 1 2 Module ngx_http_ssl_module (англ.)
  3. The nginx Open Source Project on Open Hub: Languages Page — 2006.