Русская Википедия:Nginx

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Lowercase Шаблон:Карточка программы

Nginx (engine x — по-русски произносится как энджи́нкс или э́нжин-и́кс[1]Шаблон:Проверить авторитетность[Комм 1]) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, macOS, AIX и HP-UX). Начиная с версии 0.7.52 появилась экспериментальная бинарная сборка под Microsoft Windows[2].

Игорь Сысоев начал разработку в 2002 году[3]. Осенью 2004 года вышел первый публично доступный релиз. С июля 2011 работа над nginx продолжается в рамках компании Nginx.Шаблон:Переход

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

Nginx позиционируется производителем как простой, быстрый и надёжный сервер, не перегруженный функциями.

Применение nginx целесообразно прежде всего для статических веб-сайтов и как обратного прокси-сервера перед динамическими сайтамиШаблон:Нет АИ.

HTTP-сервер

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

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

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

Архитектура

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

Алгоритм работы HTTP-сервера выглядит следующим образом[4]:

  1. получить очередной дескриптор из kevent(2);
  2. прочитать данные из файла и записать в socket, используя либо write(2)/read(2), например, так[Комм 2]:
while
(
   (
      cnt = read
      (
         read_file_descriptor,
         buffer,
         block_size
      ),
      write
      (
         socket_file_descriptor,
         buffer,
         count
      ) == cnt
   )
)
   byte_count += count;
либо используя системный вызов sendfile(2), выполняющий те же действия, что приведённый выше код, но в пространстве ядра;
  1. перейти к шагу 1.

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

location’ы могут задаваться точным URI, частью URI либо регулярным выражением. Location’ы могут быть сконфигурированы для обслуживания запросов из статического файла, проксирования на fastcgi/memcached сервер.

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

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

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

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

По данным Netcraft на август 2020 года, число сайтов, обслуживаемых nginx, превышает 448 миллионов, что делает его первым по популярности веб-сервером в мире. Доля среди активных сайтов — 19,74 %, что ставит nginx на второе место после веб-сервера Apache[5].

По данным W3Techs, nginx наиболее часто используется на высоконагруженных сайтах[6], занимая первое место по частоте использования среди 100 000 самых посещаемых сайтов в мире — больше трети из них работает на nginx.

По данным российского регистратора REG.RU, nginx является самым популярным веб-сервером доменных зон .ru[7], .рф[8] и .su[9], обслуживая более половины каждого сегмента. nginx — самый популярный веб-сервер в России с долей рынка 65,90 %[10].

Среди известных проектов, использующих nginx: Рамблер[11], Яндекс[12], ВКонтакте[13], Facebook, Netflix[14], Instagram[15], Mail.ru, Хабр[16], Живой Журнал[17], Avito.ru[18], Badoo[19], Ukr.net, Begun, Wordpress.com, SourceForge.net[20], Qiwi.com[21], Groupon, Rutracker.org[Комм 3], Pinterest[22], Tumblr[23], Superjob.ru[24], HeadHunter[25], 2ГИС[26], Orcatec и многие другие[5].

Компания Nginx

Шаблон:Карточка компании Шаблон:Falseredirect Для разработки коммерческих продуктов Игорь Сысоев создал в июле 2011 года компанию Nginx[27]. Разработка ведётся в офисе, находящемся в Москве, для продаж создана американская «дочка» — Nginx Inc[28]. В феврале 2012 компания начала предоставлять платные услуги[29], были введены три пакета технической поддержки — Premium, Advanced и Essential, в рамках которых подписчики получали услуги по установке, настройке производительности, конфигурации, сопровождению, содействию в проектировании, окончательной оптимизации.

В декабре 2011 года компания привлекла 3 млн долларов от пула инвесторов (в раунде лидировал фонд Шаблон:Iw; соинвесторами выступили фонды Runa Capital и семейный фонд Майкла Делла Шаблон:Iw[28][30].

В октябре 2013 компания привлекла ещё 10 млн долларов. Ведущим инвестором выступил фонд Шаблон:Iw; соинвесторами выступили все фонды предыдущего раунда, а также Аарон Леви, глава Box.com[31].

9 декабря 2014 было объявлено о привлечении дополнительных инвестиций в размере 20 млн долларов. Возглавил раунд венчурный фонд New Enterprise Associates при участии фондов Шаблон:Iw, Runa Capital, E.ventures (бывший BV Capital) и гендиректора Nginx Гуса Робертсона[32][33][34].

11 марта 2019 года компания F5 Networks объявила[35] о покупке Nginx за 670 млн долларов, сделка была завершена 9 мая 2019 года[36][37].

12 декабря 2019 года стало известно, что корпорация Rambler (46,5 % которой принадлежит Сбербанку России[38]) заявила исключительные права на исходные тексты nginx, отдельные СМИ сообщали о проведении обыска в офисе компании Nginx и об уголовном деле по ст. 146 УК РФ (Нарушение авторских и смежных прав)[39][40][41][42]. 18 мая 2020 года дело прекращено по пункту 1 части 1 статьи 24 УПК РФ (отсутствие события преступления)[43][44][45].

18 января 2022 года было объявлено, что Игорь Сысоев покидает Nginx и F5[46].

См. также

Примечания

Комментарии

Шаблон:Примечания

Источники

Шаблон:Примечания

Ссылки

Шаблон:Веб-серверы

Внешние ссылки

  1. Лекция «Сравнительный анализ архитектур серверных интернет-приложений для высоких нагрузок», лектор: Игорь Сысоев Шаблон:Wayback.
  2. https://nginx.org/ru/docs/windows.html Шаблон:Wayback nginx под Windows
  3. На http://sysoev.ru/nginx/ Шаблон:Wayback можно прочитать: «Я начал разрабатывать nginx весной 2002 года…»
  4. Доклад Шаблон:Wayback Глеба Смирнова (glebius@freebsd.org), разработчика nginx и FreeBSD, на конференции «ruBSD 2014» 13 декабря 2014 года.
  5. 5,0 5,1 December 2019 Web Server Survey Шаблон:WaybackШаблон:Ref-en
  6. Usage of web servers broken down by ranking Шаблон:АрхивированоШаблон:Ref-en
  7. Шаблон:Cite web
  8. Шаблон:Cite web
  9. Шаблон:Cite web
  10. Шаблон:Cite web
  11. Web Technologies used by Rambler.ruШаблон:Ref-en
  12. Web Technologies used by Yandex.ruШаблон:Ref-en
  13. Web Technologies used by Vk.comШаблон:Ref-en
  14. Шаблон:Cite web
  15. Web Technologies used by Instagram.comШаблон:Ref-en
  16. Web Technologies used by Habrahabr.ruШаблон:Ref-en
  17. Web Technologies used by Livejournal.comШаблон:Ref-en
  18. Web Technologies used by Avito.ruШаблон:Ref-en
  19. Web Technologies used by Badoo.comШаблон:Ref-en
  20. GET -ed http://sourceforge.net Шаблон:Wayback | grep Server
  21. Шаблон:Cite web
  22. Web Technologies used by Pinterest.comШаблон:Ref-en
  23. Web Technologies used by Tumblr.comШаблон:Ref-en
  24. Web Technologies used by Superjob.ruШаблон:Ref-en
  25. Web Technologies used by Hh.ruШаблон:Ref-en
  26. Web Technologies used by 2gis.ruШаблон:Ref-en
  27. Шаблон:Cite web
  28. 28,0 28,1 Шаблон:Cite web
  29. NGINX начинает предлагать платные услуги своим клиентам Шаблон:WaybackШаблон:Ref-en
  30. Шаблон:Cite web
  31. Шаблон:Cite web
  32. Шаблон:Cite web
  33. Шаблон:Cite web
  34. Шаблон:Cite web
  35. Шаблон:Cite web
  36. Шаблон:Cite web
  37. Шаблон:Cite web
  38. Шаблон:Cite web
  39. Шаблон:Cite web
  40. Шаблон:Cite web
  41. Шаблон:Cite web
  42. Шаблон:Cite web
  43. Шаблон:Cite web
  44. Шаблон:Cite web
  45. Шаблон:Cite web
  46. Шаблон:Cite news

Шаблон:Выбор языка


Ошибка цитирования Для существующих тегов <ref> группы «Комм» не найдено соответствующего тега <references group="Комм"/>