После года разработки опубликована новая стабильная ветка высокопроизводительного HTTP-сервера и многопротокольного прокси-сервера nginx 1.28.0, которая вобрала в себя изменения, накопленные в основной ветке 1.27.x. В дальнейшем все изменения в стабильной ветке 1.28 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.29, в которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus.
В соответствии с мартовским отчётом компании Netcraft под управлением nginx работает около 245 млн сайтов (год назад 243 млн, два года назад 289 млн). Nginx используется на 17.89% всех активных сайтов (год назад 18.15%, два года назад 18.94%), что соответствует первому месту по популярности в данной категории (доля Apache соответствует 16.03% (год назад 20.09%, два года назад 20.52%), Cloudflare — 17.81% (14.12%, 11.32%), Google — 9.89% (10.41%, 9.89%).
При рассмотрении всех сайтов nginx сохраняет лидерство и занимает 20.48% рынка (год назад 22.31%, два года назад — 25.94%), в то время как доля Apache соответствует 16.03% (20.17%, 20.58%), Cloudflare — 12.87% (11.24%, 10.17%), OpenResty (платформа на базе nginx и LuaJIT) — 9.36% (7.93%, 7.94%).
Среди миллиона самых посещаемых сайтов в мире nginx занимает второе место с долей 20.37% (год назад 20.63%, два года назад 21.37%). Первое место удерживает Cloudflare — 22.32% (год назад 22.59%, два года назад 21.62%). Доля Apache httpd — 17.95% (20.09%, 21.18%).
По данным W3Techs nginx используется на 33.8% сайтов из миллиона самых посещаемых (в апреле прошлого года этот показатель составлял 34.3%, позапрошлого — 34.5%). Доля Apache за год снизилась с 30.1% до 26.3%, а доля Microsoft IIS снизилась с 5% до 4%. Доля Node.js увеличилась с 3.2% до 4.4%, а доля LiteSpeed с 12.9% до 14.6%.
Наиболее заметные улучшения, добавленные в процессе формирования основной ветки 1.27.x:
- Для соединений, использующих протокол QUIC, добавлена поддержка алгоритма управления сетевой перегрузкой CUBIC (RFC 9438), работа которого сводится к постепенному увеличению размера окна перегрузки до появления потери пакетов, после чего размер окна откатывается на значение до начала потери. В проведённых тестах использование CUBIC позволило сократить время передачи файла размером 500МБ на 24% при задержках 40ms и BDP 750K (Bandwidth Delay Product) и на 73% при задержках 100ms и BDP 9M.
- В модуль stream добавлена поддержка проверки отзыва сертификатов клиентов, используя протокол OCSP (Online Certificate Status Protocol).
- В модуле stream реализована поддержка техники проверки отзыва сертификатов OCSP Stapling, суть которой в том, что при согласовании TLS-соединения заверенный удостоверяющим центром ответ OCSP передаётся сервером, обслуживающим сайт, без необходимости прямого обращения к удостоверяющему центру).
- При запуске и обновлении конфигурации реализовано кэширование certifikatat SSL, ключей и CRL (Certificate Revocation List).
- Shtuar mundësi për të reduktuar konsumimin e burimeve dhe për të ulur ngarkesën në CPU kur përdoret TLS në konfigurime me numër të madh blokesh server dhe lokacion. Ndryshimet e shtura lejojnë që në vend të krijimit të një konteksti të veçantë SSL për çdo bllok konfigurimi (SSL_CTX në OpenSSL), të përdoret konteksti ekzistues SSL nga blloku prind.
- В директиве «ssl_client_certificate» обеспечена поддержка сертификатов с дополнительной информацией.
- Для проверки клиентских SSL-сертификатов директива «ssl_client_certificate» теперь не является обязательной.
- В модуль ngx_mail_proxy_module добавлена поддержка специфичного для SmarterMail режима IMAP LOGIN с нетегированным ответом CAPABILITY.
- В модуль ngx_http_proxy_module добавлена директива «proxy_pass_trailers», разрешающая передачу полей заголовков в конце ответа от проксируемого сервера к клиенту.
- В директиву «server», используемую в блоке «upstream», добавлена поддержка параметра «resolve», включающего отслеживание изменения IP-адреса для используемого доменного имени и автоматическое обновление конфигурации блока «upstream» без необходимости перезапуска nginx в случае изменения адреса.
- Добавлена возможность использования переменных в директивах «proxy_limit_rate», «fastcgi_limit_rate», «scgi_limit_rate» и «uwsgi_limit_rate».
- В директивах «proxy_bind», «fastcgi_bind», «grpc_bind», «memcached_bind», «scgi_bind» и «uwsgi_bind», а также в качестве адреса клиента в модуле ngx_http_realip_module разрешено указание IPv6-адресов в квадратных скобках без номера порта.
- Është shtuar direktiva «keepalive_min_timeout», e cila përcakton kohën e skadimit, gjatë së cilës nginx nuk do të mbyllë lidhjen keep-alive me klientin.
- По умолчанию отключены протоколы TLSv1 и TLSv1.1.
- Решены проблемы с долгой загрузкой файлов конфигурации из-за повторного разбора одного и того же набора TLS-сертификатов, ключей и списков удостоверяющих центров. Ускорена перезагрузка конфигурации за счёт повторного использования не изменившихся TLS-объектов, таких как сертификаты, ключи и CRL. Для отключения наследования объектов при обновлении конфигурации добавлена директива «ssl_object_cache_inheritable».
- Shtohet cache për certifikatat dhe çelësat e ngarkuar duke përdorur variabla në direktivat (p.sh. «ssl_certificate /etc/ssl/$ssl_server_name.crt»). Për menaxhimin e cache-it janë shtuar direktivat «ssl_certificate_cache», «proxy_ssl_certificate_cache», «grpc_ssl_certificate_cache» dhe «uwsgi_ssl_certificate_cache». Gjatë përdorimit të këtyre direktivave mund të konfiguroni madhësinë maksimale të cache-it, kohën e skadimit të regjistrimeve dhe kohën e pastrimit të regjistrimeve të papërdorura. Për shembull: «ssl_certificate_cache max=1000 inactive=20s valid=1m;».
- Снижено потребление памяти при обработке долгоживущих запросов в конфигурациях, в которых используются директивы «gzip», «gunzip», «ssi», «sub_filter» или «grpc_pass».
- Максимальный размер кэшируемых в разделяемой памяти сеансов SSL увеличен до 8192.
- Налажена сборка с Си-библиотекой Musl.
- Проведена работа по оптимизации производительности и устранению ошибок в реализации HTTP/3.
Дополнительно можно отметить публикацию релиза проекта FreeNginx 1.28.0, развивающего форк Nginx. Разработку форка ведёт Максим Дунин, один из ключевых разработчиков Nginx. FreeNginx позиционируется как некоммерческий проект, обеспечивающий разработку кодовой базы Nginx без корпоративного вмешательства. Среди специфичных изменений в ветке FreeNginx 1.28:
- Параметр «off» в директиве «pid», отключающий создание PID-файла.
- Ограничение интенсивности записи сообщений в лог ошибок для защиты от заполнения лога типовыми сообщениями.
- Реализация параметра multipath в директиве listen для поддержки Multipath TCP.
- Поддержка HTTP-заголовка «Age» для определения времени жизни записей к кэше.
- Добавление методов аутентификации XOAUTH2 и OAUTHBEARER в модуль mail_proxy.
Burimi: opennet.ru
