- nginx
-
nginx Тип Веб-сервер, почтовый прокси-сервер
Автор Разработчик NGINX, Inc.
Написана на Операционная система Первый выпуск Последняя версия 1.2.6 (12 декабря 2012)
Тестовая версия Лицензия Сайт nginx (англ. engine x) (по-русски произносится как э́нджин-и́кс[4][5]) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX и HP-UX). Начиная с версии 0.7.52 появилась бинарная сборка под Microsoft Windows.
Игорь Сысоев начал разработку в 2002-м году[6]. Осенью 2004 года вышел первый публично доступный релиз. По состоянию на 2012 год, поддержка и доработка 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 на май 2012 года, число сайтов, обслуживаемых nginx, превышает 70 миллионов[7], что делает его третьим по популярности веб-сервером в мире. При этом, процент активных сайтов, использующих nginx, составляет 12,49 % от общего количества активных сайтов, что делает nginx вторым в мире по популярности веб-сервером среди активных сайтов, уступая лишь веб-серверу Apache.
По данным W3Techs, nginx наиболее часто используется на высоконагруженных сайтах[8], занимая второе место по частоте использования среди 1000 самых посещаемых сайтов в мире — почти четвертая часть таких сайтов работает на nginx.
По данным 1stat.RU, nginx является самым популярным веб-сервером доменной зоны .ru, обслуживая более половины всего сегмента[9].
Среди известных проектов, использующих nginx: Rambler, Yandex, Mail.ru, Begun, Wordpress.com, SourceForge.net[10], vk.com, Facebook, Groupon, Diary.ru, Rutracker.org[11] и многие другие[7].
В связи с растущей популярностью руководство проекта nginx решило начать предлагать коммерческий сервис для своих клиентов[12]. Для этого были введены три пакета технической поддержки — Premium, Advanced и Essential. Эти пакеты включают в себя установку, повышение производительности, конфигурацию, сопровождение программного обеспечения, реализацию, содействие в проектировании и финальной оптимизации.
Безопасность
По результатам исследования веб-серверов в декабре 2012 года Netcraft обнаружила новый rootkit на nginx сервере, который заражает веб-серверы, работающие на 64-разрядном GNU/Linux. Rootkit, атакующий методом drive-by-download, вводит iFrame в исходящие пакеты TCP зараженной машины, таким образом, заражается весь веб-трафик от сервера. И хотя Netcraft утверждает, что rootkit сначала был обнаружен на nginx сервере, он не предназначается конкретно для nginx [13].
Примечания
- ↑ Лог изменений
- ↑ Лицензия. Архивировано из первоисточника 7 февраля 2012.
- ↑ Commercial support
- ↑ Лекция «Сравнительный анализ архитектур серверных интернет-приложений для высоких нагрузок», лектор: Игорь Сысоев.
- ↑ Сысоев на конференциях не раз говорил, что название сервера стоит читать, как «энжин-икс» http://habrahabr.ru/post/136740/
- ↑ На http://sysoev.ru/nginx/ можно прочитать: «Я начал разрабатывать nginx весной 2002 года…»
- ↑ 1 2 May 2012 Netcraft Web Server Survey (англ.)
- ↑ Usage of web servers broken down by ranking (англ.)
- ↑ Статистика по веб-серверам зоны RU на начало ноября 2011 г.
- ↑ GET -ed http://sourceforge.net | grep Server
- ↑ Вкладка «Net» из Firebug’а
- ↑ NGINX начинает предлагать платные услуги своим клиентам (англ.)
- ↑ Nginx поразил новый rootkit//High Load Web
См. также
Ссылки
- Официальный сайт. (рус.)
- Английская версия. (англ.)
- Wiki-nginx (англ.)
- Лист рассылки nginx (рус.)
- Готовая сборка для Windows Nginx+Apache+Mysql+PHP
- Презентация использования Nginx+mod-psgi
- Статья «введение в nginx» (2 части) (рус.)
- Обзор плагина для интеграции IntelliJ IDEA с nginx (рус.) Сам плагин
- Интервью с создателем NGINX Игорем Сысоевым // Хакер. — 2011. — № 12.</ref>
Категории:- Программное обеспечение по алфавиту
- Свободные веб-серверы
- Свободное серверное программное обеспечение
- Свободное программное обеспечение, написанное на Си
- Программное обеспечение с лицензией BSD
Wikimedia Foundation. 2010.