После 13 месяцев разработки представлена новая стабильная ветка высокопроизводительного HTTP-сервера и многопротокольного прокси-сервера nginx 1.22.0, которая вобрала в себя изменения, накопленные в основной ветке 1.21.x. В дальнейшем все изменения в стабильной ветке 1.22 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.23, в которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus.
В соответствии с апрельским отчетом компании Netcraft nginx используется на 20.08% всех активных сайтов (год назад 20.15%, два года назад 19.56%), что соответствует второму месту по популярности в данной категории (доля Apache соответствует 22.58% (год назад 25.38%), Cloudflare – 10.42% (8.51%), Google – 8.89% (10.09%). При этом при рассмотрении всех сайтов nginx сохраняет лидерство и занимает 31.13% рынка (год назад 35.34%, два года назад – 36.91%), в то время как доля Apache соответствует 23.08% (25.98%), OpenResty (платформа на базе nginx и LuaJIT) – 8.01% (6.55%), Cloudflare – 5.49%, Microsoft IIS – 4% (5.96%).
Среди миллиона самых посещаемых сайтов в мире доля nginx составляет 21.79% (год назад 23.06%, два года назад 25.54%). В настоящее время под управлением nginx работает около 361 млн сайтов (год назад 419 млн). По данным W3Techs nginx используется на 33.5% сайтов из миллиона самых посещаемых, в мае прошлого года этот показатель составлял 33.8%, позапрошлого – 31.9%. Доля Apache за год снизилась с 33.8% до 31.5%, а доля Microsoft IIS с 7% до 6%. Доля LiteSpeed выросла с 8.5% до 12.1%, а Node.js с 1.2% до 1.9%. В России nginx используется на 79.8% самых посещаемых сайтов (год назад – 79.1%).
Наиболее заметные улучшения, добавленные в процессе формирования основной ветки 1.21.x:
- Добавлена новая директива mp4_start_key_frame в модуле ngx_http_mp4_module для вещания видеопотока, начиная с ключевого кадра.
- В директивах “proxy_ssl_certificate”, “proxy_ssl_certificate_key” “grpc_ssl_certificate”, “grpc_ssl_certificate_key”, “uwsgi_ssl_certificate” и “uwsgi_ssl_certificate_key” добавлена поддержка переменных.
- В директиве “sendfile_max_chunk” значение по умолчанию изменено на 2 мегабайта;
- В почтовый прокси-модуль добавлена поддержка “pipelining” для передачи нескольких запросов POP3 или IMAP в одном соединении, а также добавлена новая директива “max_errors”, определяющая максимальное число ошибок протокола, после которых соединение будет закрыто.
- Реализована передача заголовков “Auth-SSL-Protocol” и “Auth-SSL-Cipher” серверу аутентификации почтового прокси.
- В модуль stream добавлен параметр “fastopen”, включающий режим “TCP Fast Open” для слушающих сокетов.
- Налажено экранирование символов “””, “”, “”, “^”, “‘”, “{“, “|” и “}” при проксировании с изменением URI.
- В модуль stream добавлена директива proxy_half_close, при помощи которой можно настроить поведение при закрытии проксируемого соединения TCP на одной из сторон (“TCP half-close”).
- В модуль stream добавлена поддержка TLS-расширения ALPN. Для определения списка поддерживаемых протоколов ALPN (h2, http/1.1) предложена директива ssl_alpn, а для получения информации о согласованном с клиентом протоколе ALPN переменная $ssl_alpn_protocol.
- Прекращена поддержка экспортного набора шифров.
- Обеспечена совместимость с библиотекой OpenSSL 3.0. Добавлена поддержка вызова SSL_sendfile() при использовании OpenSSL 3.0.
- Добавлена поддержка библиотеки PCRE2, предоставляющей функции для обработки регулярных выражений.
- При загрузке сертификатов сервера налажено использование уровней безопасности, поддерживаемых начиная с OpenSSL 1.1.0 и задаваемых через параметр “@SECLEVEL=N” в директиве ssl_ciphers.
- В API фильтрации тела запроса разрешена буферизация обрабатываемых данных.
- На платформе FreeBSD улучшена поддержка системного вызова sendfile, предназначенного для организации прямой передачи данных между файловым дескриптором и сокетом.
- Прекращена поддержка установки HTTP/2-соединений с использованием расширения NPN (Next Protocol Negotiation) вместо ALPN.
- Обеспечена блокировка запросов HTTP/1.0, включающих HTTP-заголовок
“Transfer-Encoding” (появился в версии протокола HTTP/1.1). - Усилена защита от атак класса “HTTP Request Smuggling” на системы фронтэнд-бэкенд, позволяющих вклиниваться в содержимое запросов других пользователей, обрабатываемых в том же потоке между фронтэндом и бэкендом.