Nginx

Nginx
Логотип программы Nginx
логотип nginx
Тип веб-сервер и прокси-сервер
Автор NGINX, Inc.[вд]
Разработчики Максим Дунин[вд] и Игорь Владимирович Сысоев
Написана на Си[4]
Операционные системы Unix-подобная операционная система и Windows
Первый выпуск 4 октября 2004[1]
Последняя версия
Репозиторий github.com/nginx/nginx
Лицензия 2-пунктная лицензия BSD[вд][5][6]
Сайт nginx.org (англ.)​ (рус.)
Логотип Викисклада Медиафайлы на Викискладе

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

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

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

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

Применение nginx целесообразно прежде всего для статических веб-сайтов и как обратного прокси-сервера перед динамическими сайтами[источник не указан 4515 дней].

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-сервера выглядит следующим образом[10]:

  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[11].

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

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

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

Компания Nginx

Nginx Inc.
Изображение логотипа
Тип частная компания
Основание 2011
Упразднена 2016
Причина упразднения поглощена F5 Networks
Основатели Игорь Владимирович Сысоев и Максим Дунин[вд]
Расположение  США: Сан-Франциско, Калифорния
Отрасль разработка программного обеспечения (МСОК6201)
Продукция Nginx, Nginx Plus
Сайт nginx.com
Логотип Викисклада Медиафайлы на Викискладе

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

В декабре 2011 года компания привлекла 3 млн долларов от пула инвесторов (в раунде лидировал фонд BV Capital[англ.]; соинвесторами выступили фонды Runa Capital и семейный фонд Майкла Делла MSD Capital[англ.][34][36].

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

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

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

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

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

В конце 2022 г. часть бывших разработчиков Nginx выпустила Angie, форк Nginx с открытым исходным кодом; Игорь Сысоев в работе над этим проектом участия не принимает.[53][54][55]

См. также

Примечания

Комментарии

  1. Буква X в английском языке называется экс /ˈɛks/
  2. FreeBSD 1.0, 1993 год. Код функции send_data() из src/libexec/ftpd/ftpd.c.
  3. Вкладка «Net» из Firebug’а

Источники

  1. http://nginx.org/ru/CHANGES.ru
  2. Release 1.27.2 — 2024.
  3. 1 2 Module ngx_http_ssl_module (англ.)
  4. The nginx Open Source Project on Open Hub: Languages Page — 2006.
  5. https://nginx.org/LICENSE
  6. The nginx Open Source Project on Open Hub: Licenses Page — 2006.
  7. Лекция «Сравнительный анализ архитектур серверных интернет-приложений для высоких нагрузок», лектор: Игорь Сысоев Архивная копия от 24 марта 2018 на Wayback Machine.
  8. https://nginx.org/ru/docs/windows.html Архивная копия от 17 января 2020 на Wayback Machine nginx под Windows
  9. На http://sysoev.ru/nginx/ Архивная копия от 7 января 2006 на Wayback Machine можно прочитать: «Я начал разрабатывать nginx весной 2002 года…»
  10. Доклад Архивная копия от 2 апреля 2015 на Wayback Machine Глеба Смирнова ([email protected]), разработчика nginx и FreeBSD, на конференции «ruBSD 2014» 13 декабря 2014 года.
  11. 1 2 December 2019 Web Server Survey Архивная копия от 14 декабря 2019 на Wayback Machine (англ.)
  12. Usage of web servers broken down by ranking Архивировано 5 февраля 2013 года. (англ.)
  13. Веб-серверы зоны .RU. Дата обращения: 6 февраля 2014. Архивировано 9 февраля 2014 года.
  14. Веб-серверы зоны .РФ. Дата обращения: 6 марта 2014. Архивировано 2 марта 2014 года.
  15. Веб-серверы зоны .SU. Дата обращения: 6 марта 2014. Архивировано 2 марта 2014 года.
  16. Статистика российского интернета. runfo.ru. Дата обращения: 17 мая 2017. Архивировано 17 февраля 2017 года.
  17. Web Technologies used by Rambler.ru (англ.)
  18. Web Technologies used by Yandex.ru (англ.)
  19. Web Technologies used by Vk.com (англ.)
  20. Netflix — Appliance Software. Дата обращения: 14 февраля 2018. Архивировано 16 февраля 2018 года.
  21. Web Technologies used by Instagram.com (англ.)
  22. Web Technologies used by Habrahabr.ru (англ.)
  23. Web Technologies used by Livejournal.com (англ.)
  24. Web Technologies used by Avito.ru (англ.)
  25. Web Technologies used by Badoo.com (англ.)
  26. GET -ed http://sourceforge.net Архивная копия от 8 января 2011 на Wayback Machine | grep Server
  27. Web Technologies used by Qiwi.com. w3techs.com. Дата обращения: 20 мая 2016.
  28. Web Technologies used by Pinterest.com (англ.)
  29. Web Technologies used by Tumblr.com (англ.)
  30. Web Technologies used by Superjob.ru (англ.)
  31. Web Technologies used by Hh.ru (англ.)
  32. Web Technologies used by 2gis.ru (англ.)
  33. Основатели Nginx: Про наш продукт никто и не должен знать. Ведомости (17 марта 2019). Дата обращения: 14 декабря 2019. Архивировано 14 декабря 2019 года.
  34. 1 2 Анастасия Голицына. Nginx получила от фондов $3 млн (англ.). Ведомости (11 октября 2011). Дата обращения: 19 октября 2014. Архивировано 17 мая 2013 года.
  35. NGINX начинает предлагать платные услуги своим клиентам Архивная копия от 13 марта 2012 на Wayback Machine (англ.)
  36. Natasha Starkell. Russian Nginx Raises $3 Million From International Investors (англ.). Techcrunch (11 октября 2011). Дата обращения: 19 октября 2014. Архивировано 27 октября 2014 года.
  37. Frederic Lardinois. Nginx Raises $10M Series B Round Led By NEA (англ.). Techcrunch (15 октября 2013). Дата обращения: 19 октября 2014. Архивировано 20 октября 2014 года.
  38. Мария Коломыченко. Nginx вышел на третий раунд. Коммерсант (9 декабря 2014). Дата обращения: 9 декабря 2014. Архивировано 9 декабря 2014 года.
  39. Frederic Lardinois. Nginx Raises $20M Series B1 Round To Drive International Expansion (англ.). Techcrunch (9 декабря 2014). Дата обращения: 9 декабря 2014. Архивировано 10 декабря 2014 года.
  40. Jordan Novet. Nginx gets $20M, because an open-source web server is just the beginning (англ.). VentureBeat (9 декабря 2014). Дата обращения: 9 декабря 2014. Архивировано 10 декабря 2014 года.
  41. Form 8-K. Дата обращения: 15 декабря 2019. Архивировано 15 декабря 2019 года.
  42. F5 Networks - F5 Completes Acquisition of NGINX. Дата обращения: 15 декабря 2019. Архивировано 15 декабря 2019 года.
  43. NGINX Is Now Officially Part of F5 - NGINX. Дата обращения: 15 декабря 2019. Архивировано 12 декабря 2019 года.
  44. Сбербанк закрыл сделку по покупке 46,5% Rambler Group. РБК. Дата обращения: 14 декабря 2019. Архивировано 12 декабря 2019 года.
  45. Rambler предъявила претензии на Nginx. Коммерсантъ. Дата обращения: 12 декабря 2019. Архивировано 11 ноября 2020 года.
  46. В офисе IT-компании Nginx прошли следственные действия. Радио Свобода (12 декабря 2019). Дата обращения: 12 декабря 2019. Архивировано 12 декабря 2019 года.
  47. В офисе стартапа Nginx обыски, основатели задержаны. Дело инициировала компания Александра Мамута. The Bell (12 декабря 2019). Дата обращения: 12 декабря 2019. Архивировано 12 декабря 2019 года.
  48. Cimpanu, Catalin Russian police raid NGINX Moscow office (англ.). ZDNet (12 декабря 2019). Дата обращения: 12 декабря 2019. Архивировано 12 декабря 2019 года.
  49. МВД закрыло дело против основателей Nginx. РИА Новости (7 июля 2020). Дата обращения: 31 декабря 2021. Архивировано 11 июня 2021 года.
  50. МВД подтвердило прекращение уголовного дела о правах на Nginx. Интерфакс (7 июля 2020). Дата обращения: 31 декабря 2021. Архивировано 10 мая 2022 года.
  51. МВД сообщило о прекращении дела о правах на Nginx. РБК (22 июня 2020). Дата обращения: 31 декабря 2021. Архивировано 7 ноября 2021 года.
  52. Whiteley, Rob (2022-01-18). "Do Svidaniya, Igor, and Thank You for NGINX". NGINX (англ.). Архивировано 19 января 2022. Дата обращения: 19 января 2022. we announce today Igor has chosen to step back from NGINX and F5 in order to spend more time with his friends and family and to pursue personal projects
  53. Первый выпуск Angie, форка Nginx от разработчиков, ушедших из компании F5. OpenNET (3 ноября 2022). Дата обращения: 8 мая 2024.
  54. Darkcrizt Angie, the Nginx fork created by developers who left F5 (англ.). Desde Linux (3 ноября 2022). Дата обращения: 14 декабря 2023.
  55. Angie: A New NGINX Fork Developed by Some of Its Former Devs (англ.). Vuink.com. Дата обращения: 14 декабря 2023.

Ссылки