04.07.2022

Релиз nginx 1.22.0

После 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:

  • В директивах «proxy_ssl_certificate», «proxy_ssl_certificate_key» «grpc_ssl_certificate», «grpc_ssl_certificate_key», «uwsgi_ssl_certificate» и «uwsgi_ssl_certificate_key» добавлена поддержка переменных.
  • В почтовый прокси-модуль добавлена поддержка режима «pipelining» для передачи нескольких запросов POP3 или IMAP в одном соединении, а также добавлена новая директива «max_errors», определяющая максимальное число ошибок протокола, после которых соединение будет закрыто.
  • Реализована передача заголовков «Auth-SSL-Protocol» и «Auth-SSL-Cipher» серверу аутентификации почтового прокси.
  • В модуль stream добавлена поддержка TLS-расширения ALPN. Для определения списка поддерживаемых протоколов ALPN (h2, http/1.1) предложена директива ssl_alpn, а для получения информации о согласованном с клиентом протоколе ALPN переменная $ssl_alpn_protocol.
  • В модуль stream добавлен параметр «fastopen», включающий режим «TCP Fast Open» для слушающих сокетов.
  • Налажено экранирование символов «»», «», «>», «\», «^», «`», «{«, «|» и «}» при проксировании с изменением URI.
  • В модуль stream добавлена директива proxy_half_close, при помощи которой можно настроить поведение при закрытии проксируемого соединения TCP на одной из сторон («TCP half-close»).
  • В модуль ngx_http_mp4_module добавлена новая директива mp4_start_key_frame для вещания видеопотока, начиная с ключевого кадра.
  • Добавлена переменная $ssl_curve, возвращающая тип эллиптической кривой, выбранной для согласовании ключей в сеансе TLS.
  • В директиве «sendfile_max_chunk» значение по умолчанию изменено на 2 мегабайта;
  • Обеспечена совместимость с библиотекой OpenSSL 3.0. Добавлена поддержка вызова SSL_sendfile() при использовании OpenSSL 3.0.
  • Включена по умолчанию сборка с библиотекой PCRE2, предоставляющей функции для обработки регулярных выражений.
  • При загрузке сертификатов сервера налажено использование уровней безопасности, поддерживаемых начиная с OpenSSL 1.1.0 и задаваемых через параметр «@SECLEVEL=N» в директиве ssl_ciphers.
  • Прекращена поддержка экспортного набора шифров.
  • В API фильтрации тела запроса разрешена буферизация обрабатываемых данных.
  • На платформе FreeBSD улучшена поддержка системного вызова sendfile, предназначенного для организации прямой передачи данных между файловым дескриптором и сокетом. Постоянно задействован режим sendfile(SF_NODISKIO) и добавлена поддержка режима sendfile(SF_NOCACHE).
  • Прекращена поддержка установки HTTP/2-соединений с использованием расширения NPN (Next Protocol Negotiation) вместо ALPN.
  • Обеспечена блокировка запросов HTTP/1.0, включающих HTTP-заголовок «Transfer-Encoding» (появился в версии протокола HTTP/1.1).
  • Усилена защита от атак класса «HTTP Request Smuggling» на системы фронтэнд-бэкенд, позволяющих вклиниваться в содержимое запросов других пользователей, обрабатываемых в том же потоке между фронтэндом и бэкендом. Nginx теперь всегда возвращает ошибку при использовании метода CONNECT; при одновременном указании заголовков «Content-Length» и «Transfer-Encoding»; при наличии пробелов или управляющих символов в строке запроса, имени HTTP-заголовка или в значении заголовка «Host».

Источник.