Nginx — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах.
Nginx позиционируется производителем как простой, быстрый и надёжный сервер, не перегруженный функциями. Применение целесообразно прежде всего для статических веб-сайтов и как обратного прокси-сервера перед динамическими сайтами.
В nginx рабочие процессы обслуживают одновременно множество соединений, мультиплексируя их вызовами операционной системы select, epoll (Linux) и kqueue (FreeBSD). Рабочие процессы выполняют цикл обработки событий от дескрипторов (см. Событийно-ориентированное программирование). Полученные от клиента данные разбираются с помощью конечного автомата.
Разобранный запрос последовательно обрабатывается цепочкой модулей, задаваемой конфигурацией. Ответ клиенту формируется в буферах, которые хранят данные либо в памяти, либо указывают на отрезок файла. Буфера объединяются в цепочки, определяющие последовательность, в которой данные будут переданы клиенту. Если операционная система поддерживает эффективные операции ввода-вывода, такие, как writev и sendfile, то 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 теперь закрывает не только keepalive-соединения, но и соединения в состоянии ожидания закрытия сокета ("lingering close").
- Код обработки соединений в HTTP/2 приближен к реализации HTTP/1.x. Поддержка отдельных настроек "http2_recv_timeout", "http2_idle_timeout" и "http2_max_requests" прекращена в пользу общих директив "keepalive_timeout" и "keepalive_requests".
- Удалены настройки "http2_max_field_size" и "http2_max_header_size", вместо которых следует использовать "large_client_header_buffers".