След една година разработка, беше представена нова стабилна версия на високопроизводителния HTTP сървър и много-протоколен прокси сървър nginx 1.20.0, която събра промените, натрупани в основната версия 1.19.x. В бъдеще всички промени в стабилната версия 1.20 ще бъдат свързани с отстраняване на сериозни грешки и уязвимости. Скоро ще бъде създадена основната версия nginx 1.21, в която ще продължи развитието на нови възможности. За обикновените потребители, които нямат задача да осигурят съвместимост с външни модули, се препоръчва да използват основната версия, базирана на която на всеки три месеца се издават версии на комерсиалния продукт Nginx Plus.
Според мартенския отчет на компанията Netcraft, nginx се използва на 20.15% от всички активни сайтове (преди година 19.56%, преди две години 20.73%), което съответства на второто място по популярност в тази категория (дял на Apache е 25.38% (преди година 27.64%), Google - 10.09%, Cloudflare - 8.51%. При това, когато се разгледат всички сайтове, nginx запазва лидерството и заема 35.34% от пазара (преди година 36.91%, преди две години - 27.52%), докато дялът на Apache е 25.98%, OpenResty (платформа на базата на nginx и LuaJIT.) - 6.55%, Microsoft IIS - 5.96%.
Сред един милион-те най-посещавани сайтове в света, делът на nginx е 25.55% (преди година 25.54%, преди две години 26.22%). В момента под управлението на nginx са около 419 милиона сайта (преди година 459 милиона). Според данните на W3Techs, nginx се използва на 33.7% от сайтовете от милиона-те най-посещавани, през април миналата година този показател беше 31.9%, преди две години - 41.8% (спадът е обяснен с преминаването към отделно отчитане на HTTP сървъра Cloudflare). Делът на Apache намаля от 39.5% до 34% за година, а делът на Microsoft IIS от 8.3% до 7%. Делът на LiteSpeed нарасна от 6.3% до 8.4%, а Node.js от 0.8% до 1.2%. В Русия nginx се използва на 79.1% от най-посещаваните сайтове (предишната година - 78.9%).
Най-забележителните подобрения, добавени през процеса на формиране на основната версия 1.19.x:
- Добавена е възможността за проверка на клиентски сертификати с помощта на външни услуги на базата на протокола OCSP (Online Certificate Status Protocol). За активиране на проверката е предложена директива ssl_ocsp, за настройка на размера на кеша - ssl_ocsp_cache, а за презаписване на URL адреса на OCSP обработвача, посочен в сертификата - ssl_ocsp_responder.
- Включен модулът ngx_stream_set_module, който позволява задаване на стойност на променлива. server { listen 12345; set $true 1; }
- Добавена е директивата proxy_cookie_flags за указване на флагове за Cookie в проксируеми връзки. Например, за добавяне на флага httponly към Cookie „one“ и флаговете nosecure и samesite=strict за всички останали Cookie можете да използвате конструкцията: proxy_cookie_flags one httponly; proxy_cookie_flags ~ nosecure samesite=strict;
Налице е подобна директива userid_flags за добавяне на флагове към Cookie, реализирана за модула ngx_http_userid.
- Добавени са директивите „ssl_conf_command“, „proxy_ssl_conf_command“, „grpc_ssl_conf_command“ и „uwsgi_ssl_conf_command“, с които могат да се зададат произволни параметри за настройка на OpenSSL. Например, за приоритизиране на шифровете ChaCha и разширено конфигуриране на шифровете TLSv1.3 можете да зададете ssl_conf_command Options PrioritizeChaCha; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;
- Добавена е директивата „ssl_reject_handshake“, която указва да се отхвърлят всички опити за съгласуване. SSL-връзки (например, може да се използва за отхвърляне на всички входящи искания с неизвестни имена на хостове в полето SNI). server { listen 443 ssl; ssl_reject_handshake on; } server { listen 443 ssl; server_name example.com; ssl_certificate example.com.crt; ssl_certificate_key example.com.key; }
- В пощенския прокси е добавена директивата proxy_smtp_auth, която позволява удостоверяване на потребителя на бекенда с команда AUTH и механизма PLAIN SASL.
- Добавена е директивата „keepalive_time“, която ограничава общото време на живот на всяка keep-alive връзка, след което връзката ще бъде затворена (не бъркайте с keepalive_timeout, който определя времето за неактивност, след което keep-alive връзката се затваря).
- Добавена е променливата $connection_time, чрез която можете да получите информация за продължителността на връзката в секунди с точност до милисекунди.
- Към директивите „proxy_cache_path“, „fastcgi_cache_path“, „scgi_cache_path“ и „uwsgi_cache_path“ е добавен параметърът „min_free“, който регулира размера на кеша на базата на определението за минимален размер на свободно дисково пространство.
- Директивите „lingering_close“, „lingering_time“ и „lingering_timeout“ са адаптирани за работа с HTTP/2.
- Кодът за обработка на връзки в 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».
- Добавена е нова опция за командния ред «-e», която позволява задаването на алтернативен файл за запис на логовете на грешки, който ще се използва вместо логовете, зададени в настройките. Вместо името на файла може да се зададе специалното значение stderr.
Източник: opennet.ru
