nginx
Nginx | |||
---|---|---|---|
| |||
Тип | веб-сервер и прокси-сервер | ||
Автор | NGINX, Inc.[d] | ||
Разработчики | Максим Дунин[d] и Игорь Владимирович Сысоев | ||
Написана на | Си[4] | ||
Операционные системы | Unix-подобная операционная система и Windows | ||
Первый выпуск | 4 октября 2004[1] | ||
Последняя версия | |||
Репозиторий |
hg.nginx.org/nginx github.com/nginx/nginx |
||
| |||
Лицензия | 2-пунктная лицензия BSD[d][5][6] | ||
Сайт | nginx.org (англ.) (рус.) | ||
Медиафайлы на Викискладе |
Nginx (engine x — по-русски произносится как энджи́нкс или э́нжин-и́кс[7][неавторитетный источник][8]) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, macOS, AIX и HP-UX). Начиная с версии 0.7.52 появилась экспериментальная бинарная сборка под Microsoft Windows[9].
Игорь Сысоев начал разработку в 2002 году[10]. Осенью 2004 года вышел первый публично доступный релиз. С июля 2011 работа над nginx продолжается в рамках компании Nginx.
Основные функции
Nginx позиционируется производителем как простой, быстрый и надёжный сервер, не перегруженный функциями.
Применение nginx целесообразно прежде всего для статических веб-сайтов и как обратного прокси-сервера перед динамическими сайтами[источник не указан 4315 дней].
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-сервера выглядит следующим образом[11]:
- получить очередной дескриптор из kevent(2);
- прочитать данные из файла и записать в socket, используя либо write(2)/read(2), например, так[12]:
while
(
(
cnt = read
(
read_file_descriptor,
buffer,
block_size
),
write
(
socket_file_descriptor,
buffer,
count
) == cnt
)
)
byte_count += count;
- либо используя системный вызов sendfile(2), выполняющий те же действия, что приведённый выше код, но в пространстве ядра;
- перейти к шагу 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[13].
По данным W3Techs, nginx наиболее часто используется на высоконагруженных сайтах[14], занимая первое место по частоте использования среди 100 000 самых посещаемых сайтов в мире — больше трети из них работает на nginx.
По данным российского регистратора REG.RU, nginx является самым популярным веб-сервером доменных зон .ru[15], .рф[16] и .su[17], обслуживая более половины каждого сегмента.
NGINX — самый популярный веб-сервер в России с долей рынка 65,90 %[18].
Среди известных проектов, использующих nginx: Рамблер[19], Яндекс[20], ВКонтакте[21], Facebook, Netflix[22], Instagram[23], Mail.ru, Хабр[24], Живой Журнал[25], Avito.ru[26], Badoo[27], Ukr.net, Begun, Wordpress.com, SourceForge.net[28], Qiwi.com[29], Groupon, Rutracker.org[30], Pinterest[31], Tumblr[32], Superjob.ru[33], HeadHunter[34], 2ГИС[35] и многие другие[13].
Компания Nginx
Nginx Inc. | |
---|---|
Тип | частная компания |
Основание | 2011 |
Упразднена | 2016 |
Причина упразднения | поглощена F5 Networks |
Основатели | Игорь Владимирович Сысоев и Максим Дунин[d] |
Расположение | США: Сан-Франциско, Калифорния |
Отрасль |
разработка программного обеспечения (МСОК: 6201 ) |
Продукция | Nginx, Nginx Plus |
Сайт | nginx.com |
Медиафайлы на Викискладе |
Для разработки коммерческих продуктов Игорь Сысоев создал в июле 2011 года компанию Nginx[36]. Разработка ведётся в офисе, находящемся в Москве, для продаж создана американская «дочка» — Nginx Inc[37]. В феврале 2012 компания начала предоставлять платные услуги[38], были введены три пакета технической поддержки — Premium, Advanced и Essential, в рамках которых подписчики получали услуги по установке, настройке производительности, конфигурации, сопровождению, содействию в проектировании, окончательной оптимизации.
В декабре 2011 года компания привлекла 3 млн долларов от пула инвесторов (в раунде лидировал фонд BV Capital[англ.]; соинвесторами выступили фонды Runa Capital и семейный фонд Майкла Делла MSD Capital[англ.][37][39].
В октябре 2013 компания привлекла ещё 10 млн долларов. Ведущим инвестором выступил фонд New Enterprise Associates[англ.]; соинвесторами выступили все фонды предыдущего раунда, а также Аарон Леви, глава Box.com[40].
9 декабря 2014 было объявлено о привлечении дополнительных инвестиций в размере 20 млн долларов. Возглавил раунд венчурный фонд New Enterprise Associates при участии фондов Index Ventures[англ.], Runa Capital, E.ventures (бывший BV Capital) и гендиректора Nginx Гуса Робертсона[41][42][43].
11 марта 2019 года компания F5 Networks объявила[44] о покупке Nginx за 670 млн долларов, сделка была завершена 9 мая 2019 года[45][46].
12 декабря 2019 года стало известно, что корпорация Rambler (46,5 % которой принадлежит Сбербанку России[47]) заявила исключительные права на исходные тексты nginx, отдельные СМИ сообщали о проведении обыска в офисе компании Nginx и об уголовном деле по ст. 146 УК РФ (Нарушение авторских и смежных прав)[48][49][50][51]. 18 мая 2020 года дело прекращено по пункту 1 части 1 статьи 24 УПК РФ (отсутствие события преступления)[52][53][54].
Примечания
- ↑ http://nginx.org/ru/CHANGES.ru
- ↑ Changes with nginx 1.26.0 — 2024.
- ↑ 1 2 Module ngx_http_ssl_module (англ.)
- ↑ The nginx Open Source Project on Open Hub: Languages Page — 2006.
- ↑ https://nginx.org/LICENSE
- ↑ The nginx Open Source Project on Open Hub: Licenses Page — 2006.
- ↑ Лекция «Сравнительный анализ архитектур серверных интернет-приложений для высоких нагрузок», лектор: Игорь Сысоев Архивная копия от 24 марта 2018 на Wayback Machine.
- ↑ Буква en:x в английском языке называется экс /ˈɛks/
- ↑ https://nginx.org/ru/docs/windows.html nginx под Windows
- ↑ На http://sysoev.ru/nginx/ можно прочитать: «Я начал разрабатывать nginx весной 2002 года…»
- ↑ Доклад Глеба Смирнова (glebius@freebsd.org), разработчика nginx и FreeBSD, на конференции «ruBSD 2014» 13 декабря 2014 года.
- ↑ FreeBSD 1.0, 1993 год. Код функции
send_data()
изsrc/libexec/ftpd/ftpd.c
. - ↑ 1 2 December 2019 Web Server Survey (англ.)
- ↑ Usage of web servers broken down by ranking (англ.)
- ↑ Веб-серверы зоны .RU
- ↑ Веб-серверы зоны .РФ
- ↑ Веб-серверы зоны .SU
- ↑ Статистика российского интернета runfo.ru . www.runfo.ru. Дата обращения: 17 мая 2017.
- ↑ Web Technologies used by Rambler.ru (англ.)
- ↑ Web Technologies used by Yandex.ru (англ.)
- ↑ Web Technologies used by Vk.com (англ.)
- ↑ Netflix — Appliance Software
- ↑ Web Technologies used by Instagram.com (англ.)
- ↑ Web Technologies used by Habrahabr.ru (англ.)
- ↑ Web Technologies used by Livejournal.com (англ.)
- ↑ Web Technologies used by Avito.ru (англ.)
- ↑ Web Technologies used by Badoo.com (англ.)
- ↑ GET -ed http://sourceforge.net | grep Server
- ↑ Web Technologies used by Qiwi.com . w3techs.com. Дата обращения: 20 мая 2016.
- ↑ Вкладка «Net» из Firebug’а
- ↑ Web Technologies used by Pinterest.com (англ.)
- ↑ Web Technologies used by Tumblr.com (англ.)
- ↑ Web Technologies used by Superjob.ru (англ.)
- ↑ Web Technologies used by Hh.ru (англ.)
- ↑ Web Technologies used by 2gis.ru (англ.)
- ↑ Основатели Nginx: Про наш продукт никто и не должен знать . Ведомости (17 марта 2019). Дата обращения: 14 декабря 2019.
- ↑ 1 2 Анастасия Голицына. Nginx получила от фондов $3 млн (англ.). Ведомости (11 октября 2011). Дата обращения: 19 октября 2014.
- ↑ NGINX начинает предлагать платные услуги своим клиентам (англ.)
- ↑ Natasha Starkell. Russian Nginx Raises $3 Million From International Investors (англ.). Techcrunch (11 октября 2011). Дата обращения: 19 октября 2014.
- ↑ Frederic Lardinois. Nginx Raises $10M Series B Round Led By NEA (англ.). Techcrunch (15 октября 2013). Дата обращения: 19 октября 2014.
- ↑ Мария Коломыченко. Nginx вышел на третий раунд . Коммерсант (9 декабря 2014). Дата обращения: 9 декабря 2014.
- ↑ Frederic Lardinois. Nginx Raises $20M Series B1 Round To Drive International Expansion (англ.). Techcrunch (9 декабря 2014). Дата обращения: 9 декабря 2014.
- ↑ Jordan Novet. Nginx gets $20M, because an open-source web server is just the beginning (англ.). VentureBeat (9 декабря 2014). Дата обращения: 9 декабря 2014.
- ↑ Form 8-K
- ↑ F5 Networks - F5 Completes Acquisition of NGINX
- ↑ NGINX Is Now Officially Part of F5 - NGINX
- ↑ Сбербанк закрыл сделку по покупке 46,5% Rambler Group . РБК. Дата обращения: 14 декабря 2019.
- ↑ Rambler предъявила претензии на Nginx . Коммерсантъ. Дата обращения: 12 декабря 2019.
- ↑ В офисе IT-компании Nginx прошли следственные действия . Радио Свобода (12 декабря 2019). Дата обращения: 12 декабря 2019.
- ↑ В офисе стартапа Nginx обыски, основатели задержаны. Дело инициировала компания Александра Мамута . The Bell (12 декабря 2019). Дата обращения: 12 декабря 2019.
- ↑ Cimpanu, Catalin Russian police raid NGINX Moscow office (англ.). ZDNet (12 декабря 2019). Дата обращения: 12 декабря 2019.
- ↑ МВД закрыло дело против основателей Nginx
- ↑ МВД подтвердило прекращение уголовного дела о правах на Nginx
- ↑ МВД сообщило о прекращении дела о правах на Nginx
См. также
Ссылки
- nginx.org — официальный сайт Nginx (англ.) (рус.)
- Wiki-nginx (англ.)
- Лист рассылки nginx (рус.)
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 2004 году
- Производители программного обеспечения США
- Компании по алфавиту
- Компании, основанные в 2011 году
- Компании, упразднённые в 2016 году
- Свободные веб-серверы
- Свободное серверное программное обеспечение
- Свободное программное обеспечение, написанное на Си
- Программное обеспечение с лицензией BSD