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