nginx
nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 27.61% самых нагруженных сайтов в июне 2016 года. Вот некоторые примеры успешного внедрения nginx (тексты на английском языке): 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-сервера
- Виртуальные серверы, определяемые по IP-адресу и имени;
- Поддержка keep-alive и pipelined соединений;
- Гибкость конфигурации;
- Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
- Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов, запись в syslog;
- Специальные страницы для ошибок 3xx-5xx;
- rewrite-модуль: изменение URI с помощью регулярных выражений;
- Выполнение разных функций в зависимости от адреса клиента;
- Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;
- Проверка HTTP referer;
- Методы PUT, DELETE, MKCOL, COPY и MOVE;
- FLV и MP4 стриминг;
- Ограничение скорости отдачи ответов;
- Ограничение числа одновременных соединений и запросов с одного адреса;
- Встроенный Perl.
Функциональность почтового прокси-сервера
- Перенаправление пользователя на IMAP- или POP3-сервер с использованием внешнего HTTP-сервера аутентификации;
- Проверка пользователя с помощью внешнего HTTP-сервера аутентификации и перенаправление соединения на внутренний SMTP-сервер;
- Методы аутентификации:
- Поддержка SSL;
- Поддержка STARTTLS и STLS.
Функциональность TCP/UDP прокси-сервера
- Проксирование TCP и UDP;
- SSL termination для TCP;
- Распределение нагрузки и отказоустойчивость;
- Ограничение доступа в зависимости от адреса клиента;
- Ограничение числа одновременных соединений с одного адреса.
Архитектура и масштабируемость
- Один главный и несколько рабочих процессов, рабочие процессы работают под непривилегированным пользователем;
-
Поддержка
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, число доступных данных, коды ошибок;
-
Поддержка sendfile (FreeBSD 3.1+, Linux 2.2+, Mac OS X 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+, Mac OS X);
- Поддержка accept-фильтров (FreeBSD 4.1+, NetBSD 5.0+) и TCP_DEFER_ACCEPT (Linux 2.4+);
-
На
10 000 неактивных HTTP keep-alive соединений расходуется около 2.5M памяти; - Минимум операций копирования данных.
Протестированные ОС и платформы
- FreeBSD 3 — 10 / i386; FreeBSD 5 — 10 / amd64;
- Linux 2.2 — 4 / i386; Linux 2.6 — 4 / amd64; Linux 3 — 4 / armv6l, armv7l, aarch64;
- Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
- AIX 7.1 / powerpc;
- HP-UX 11.31 / ia64;
- Mac OS X / ppc, i386;
- Windows XP, Windows Server 2003.