ФЭНДОМ


nginx (enginex}}) (по-русски произносится как э́нжин-э́кс) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX и HP-UX). Начиная с версии 0.7.52 появилась экспериментальная[1] бинарная сборка под Microsoft Windows.

Игорь Сысоев начал разработку в 2002-м году[2]. Осенью 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-сервера 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 на август 2014 года, число сайтов, обслуживаемых nginx, превышает 148 миллионов[3], что делает его третьим по популярности веб-сервером в мире. При этом, процент активных сайтов, использующих nginx, составляет 14,54 % от общего количества активных сайтов, что делает nginx вторым в мире по популярности веб-сервером среди активных сайтов, уступая лишь веб-серверу Apache.

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

По данным российского регистратора REG.RU, nginx является самым популярным веб-сервером доменных зон .ru[5], .рф[6] и .su[7], обслуживая более половины каждого сегмента.

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

Компания Nginx

Для разработки коммерческих продуктов Игорь Сысоев создал в июле 2011 года компанию Nginx. В декабре того же года компания привлекла $3 миллиона от пула инвесторов (в раунде лидировал фонд BV Capital; соинвесторами выступили фонды Runa Capital и MSD Capital Майкла Делла). Разработка вёдется в московском офисе, для продаж создана американская «дочка» — Nginx Inc. В октябре 2013 компания привлекла ещё $10 миллионов. Ведущим инвестором выступил фонд New Enterprise Associates; соинвесторами выступили все фонды предыдущего раунда, а также Аарон Леви, глава Box.com.

В феврале 2012 компания начала предоставлять коммерческий сервис для клиентов[23]. Были введены три пакета технической поддержки — Premium, Advanced и Essential. Эти пакеты включают в себя установку, повышение производительности, конфигурацию, сопровождение программного обеспечения, реализацию, содействие в проектировании и финальной оптимизации.

Примечания

См. также

Ссылки