Категории программ

Новые программы

nginx

8 марта, 2016 1

nginx (англ. engine x) (по-русски произносится как энжин-экс или энжин-икс) – веб-сервер и почтовый прокси-сервер, работающий на UNIX-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX и HP-UX). Начиная с версии 0.7.52 появилась экспериментальная бинарная сборка под Microsoft Windows.

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

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

nginx – простой, быстрый и надёжный сервер, не перегруженный функциями. Применение nginx целесообразно прежде всего для статических веб-сайтов и как прокси-сервера перед динамическими сайтами.

  • обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
  • акселерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость;
  • поддержка кэширования при акселерированном проксировании и FastCGI;
  • акселерированная поддержка FastCGI и memcached серверов, простое распределение нагрузки и отказоустойчивость;
  • модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, HTTP-аутентификация, SSI-фильтр;
  • несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно;
  • поддержка SSL;
  • поддержка PSGI (Perl Web Server Gateway Interface), WSGI (Web Server Gateway Interface);
  • экспериментальная поддержка встроенного Perl.
  • перенаправление пользователя на SMTP/IMAP/POP3-бэкенд с использованием внешнего HTTP-сервера аутентификации;
  • простая аутентификация (LOGIN, USER/PASS);
  • поддержка SSL и STARTTLS.

Архитектура nginx

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

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

  1. получить очередной дескриптор из kevent;
  2. прочитать данные из файла и записать в socket, используя либо write/read, либо используя системный вызов sendfile, выполняющий те же действия, но в пространстве ядра;
  3. перейти к шагу 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 на октябрь 2015 года, число сайтов, обслуживаемых nginx, превышает 146 миллионов, что делает его третьим по популярности веб-сервером в мире. Доля среди активных сайтов – 15,33%, что ставит nginx на второе место после веб-сервера Apache.

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

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

Использующие nginx проекты

Рамблер

Яндекс

Mail.Ru

Хабрахабр

Живой Журнал

Avito.ru

Badoo

Ukr.net

Бегун

WordPress.com

SourceForge.net

ВКонтакте

Facebook

Groupon

RuTracker.org

Netflix

Instagram

Pinterest

Tumblr

Superjob.ru

HeadHunter

2ГИС и многие другие.

nginx

Ссылки

Сайт nginx

Скачать nginx

Веб-серверы , Прокси-серверы , Серверы

1 комментарий для “nginx”

  1. RomanPat:

    Всем привет!

Оставить комментарий