Реліз nginx 1.20.0

Після року розробки представлена ​​нова стабільна гілка високопродуктивного 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 у проксованих з'єднаннях. Наприклад, для додавання до Cookie "one" прапора "httponly", а для всіх інших Cookie прапорів "nosecure" та "samesite=strict" можна використовувати конструкцію: 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

Додати коментар або відгук