Nginx

nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 21.18% самых нагруженных сайтов в мае 2023 года. Вот некоторые примеры успешного внедрения nginx (тексты на английском языке): Dropbox, Netflix, Wordpress.com, FastMail.FM.

Исходные тексты и документация распространяются под BSD-подобной лицензией из 2 пунктов.

Коммерческая поддержка осуществляется компанией Nginx, Inc.

Основная функциональность HTTP-сервера

  • Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;

  • Акселерированное обратное проксирование с кэшированием, распределение нагрузки и отказоустойчивость;

  • Акселерированная поддержка FastCGI, uwsgi, SCGI и memcached серверов с кэшированием, распределение нагрузки и отказоустойчивость;

  • Модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр, преобразование изображений; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI/uwsgi/SCGI, выполняются параллельно;

  • Поддержка SSL и расширения TLS SNI;

  • Поддержка HTTP/2 с приоритизацией на основе весов и зависимостей;

  • Поддержка HTTP/3.

Другие возможности HTTP-сервера

  • Виртуальные серверы, определяемые по IP-адресу и имени;

  • Поддержка keep-alive и pipelined соединений;

  • Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов, запись в syslog;

  • Специальные страницы для ошибок 3xx-5xx;

  • rewrite-модуль: изменение URI с помощью регулярных выражений;

  • Выполнение разных функций в зависимости от адреса клиента;

  • Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;

  • Проверка HTTP referer;

  • Методы PUT, DELETE, MKCOL, COPY и MOVE;

  • FLV и MP4 стриминг;

  • Ограничение скорости отдачи ответов;

  • Ограничение числа одновременных соединений и запросов с одного адреса;

  • Геолокация по IP-адресу;

  • A/B-тестирование;

  • Зеркалирование запросов;

  • Встроенный Perl;

  • сценарный язык njs.

Функциональность почтового прокси-сервера

  • Перенаправление пользователя на IMAP- или POP3-сервер с использованием внешнего HTTP-сервера аутентификации;

  • Проверка пользователя с помощью внешнего HTTP-сервера аутентификации и перенаправление соединения на внутренний SMTP-сервер;

  • Методы аутентификации:

    • POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;

    • IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;

    • SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;

  • Поддержка SSL;

  • Поддержка STARTTLS и STLS.

Функциональность TCP/UDP прокси-сервера

  • Проксирование TCP и UDP;

  • Поддержка SSL и расширения TLS SNI для TCP;

  • Распределение нагрузки и отказоустойчивость;

  • Ограничение доступа в зависимости от адреса клиента;

  • Выполнение разных функций в зависимости от адреса клиента;

  • Ограничение числа одновременных соединений с одного адреса;

  • Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов, запись в syslog;

  • Геолокация по IP-адресу;

  • A/B-тестирование;

  • сценарный язык njs.

Архитектура и масштабируемость

  • Один главный и несколько рабочих процессов, рабочие процессы работают под непривилегированным пользователем;

  • Гибкость конфигурации;

  • Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;

  • Поддержка kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select и poll;

  • Использование возможностей, предоставляемых kqueue, таких как EV_CLEAR, EV_DISABLE (для временного выключения события), NOTE_LOWAT, EV_EOF, число доступных данных, коды ошибок;

  • Использование возможностей, предоставляемых epoll, таких как EPOLLRDHUP (Linux 2.6.17+, glibc 2.8+) и EPOLLEXCLUSIVE (Linux 4.5+, glibc 2.24+);

  • Поддержка sendfile (FreeBSD 3.1+, Linux 2.2+, macOS 10.5+), sendfile64 (Linux 2.4.21+) и sendfilev (Solaris 8 7/01+);

  • Поддержка файлового AIO (FreeBSD 4.3+, Linux 2.6.22+);

  • Поддержка DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, macOS);

  • Поддержка accept-фильтров (FreeBSD 4.1+, NetBSD 5.0+) и TCP_DEFER_ACCEPT (Linux 2.4+);

  • На 10 000 неактивных HTTP keep-alive соединений расходуется около 2.5M памяти;

  • Минимум операций копирования данных.

Last updated