Релиз nginx 1.16.0

После года разработки представлена новая стабильная ветка высокопроизводительного HTTP-сервера и многопротокольного прокси-сервера nginx 1.16.0, которая вобрала в себя изменения, накопленные в рамках основной ветки 1.15.x. В дальнейшем все изменения в стабильной ветке 1.16 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.17, в рамках которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus.

В соответствии с апрельским отчетом компании Netcraft nginx используется на 20.73% (год назад 21.02%, два года назад 19.55%) всех активных сайтов, что соответствует второму месту по популярности в данной категории (доля Apache соответствует 30.30%, Google — 8.01%, Microsoft IIS — 6.12%). При этом при рассмотрении всех сайтов nginx выбился в лидеры и занимает 27.52% рынка (год назад 23.11%), в то время как доля Apache соответствует 26.73%, Microsoft IIS — 25.05%, Google — 1.8%.

Среди миллиона самых посещаемых сайтов в мире доля nginx составляет 26.22% (год назад 23.76%, два года назад 25.64%). В настоящее время под управлением nginx работает около 397 млн сайтов (год назад 409 млн, но общее число сайтов уменьшилось на 325 млн за счёт исчезновения некоторых парковок доменов). По данным W3Techs nginx используется на 41.8% сайтах из миллиона самых посещаемых, в апреле прошлого года этот показатель составлял 38%, позапрошлого — 33.3%. Доля Apache за год снизилась с 46.7% до 43.6%, а доля Microsoft IIS с 9.9% до 8.6%. В России nginx используется на 81% самых посещаемых сайтов (год назад — 78.9%).

Наиболее заметные улучшения, добавленные в процессе формирования основной ветки 1.15.x:

  • Добавлена возможность использования переменных в директивах 'ssl_certificate' и 'ssl_certificate_key', что можно использовать для динамической загрузки SSL-сертификатов;
  • Добавлена возможность загрузки SSL-сертификатов и секретных ключей из переменных без использования промежуточных файлов;
  • В блоке «upstream» реализована новая директива «random», при помощи которой можно организовать балансировку нагрузки со случайным выбором сервера для проброса соединения;
  • В модуле ngx_stream_ssl_preread реализована переменная $ssl_preread_protocol, которая определяет наибольшую версию протокола SSL/TLS, которую поддерживает клиент. Переменная позволяет создавать конфигурации для доступа с использованием различных протоколов с SSL и без SSL через один сетевой порт при проксировании трафика с использованием модулей http и stream. Например, для организации доступа по SSH и HTTPS через один порт 443 порт по умолчанию можно пробрасывать на SSH, но если определена версия SSL пробрасывать на HTTPS.
  • В модуль upstream добавлена новая переменная »$upstream_bytes_sent», которая отображает число байт, переданных на сервер группы;
  • В модуль stream в рамках одного сеанса добавлена возможность обработки нескольких входящих UDP-датаграмм от клиента;
  • В модуль stream добавлена директива «proxy_requests», задающее число датаграмм, полученных от клиента, по достижении которого удаляется привязка между клиентом и существующей UDP-сессией. После получения указанного количества датаграмм следующая датаграмма, полученная от того же клиента, начинает новую сессию;
  • В директиве listen появилась возможность указания диапазонов портов;
  • Добавлена директива «ssl_early_data» для включения режима 0-RTT при использовании TLSv1.3, который позволяет сохранить ранее согласованные параметры TLS-соединения и снизить до 2 число RTT при возобновлении ранее установленного соединения;
  • Для настройки keepalive для исходящих соединений (включения или выключения опции SO_KEEPALIVE для сокетов) добавлены новые директивы:
    • «proxy_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к проксируемому серверу;
    • «fastcgi_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к FastCGI-серверу;
    • «grpc_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к gRPC-серверу;
    • «memcached_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к серверу memcached;
    • «scgi_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к SCGI-серверу;
    • «uwsgi_socket_keepalive» — конфигурирует поведение «TCP keepalive» для исходящих соединений к uwsgi-серверу.
  • В директиву «limit_req» добавлен новый параметр «delay», задающий лимит, по достижении которого избыточные запросы задерживаются;
  • В блок «upstream» добавлены новые директивы «keepalive_timeout» и «keepalive_requests» для задания лимитов для Keepalive;
  • Объявлена устаревшей директива «ssl», на смену которой пришёл параметр «ssl» в директиве «listen». Определение отсутствующих SSL-сертификатов теперь производится на этапе тестирования конфигурации при использовании в настройках директивы «listen» с параметром «ssl»;
  • При использовании директивы reset_timedout_connection при истечении таймаута соединения теперь закрываются с применением кода 444;
  • SSL-ошибки «http request», «https proxy request», «unsupported protocol» и «version too low» теперь отображаются в логе с уровнем «info» вместо «crit»;
  • Добавлена поддержка метода poll на системах Windows при использовании Windows Vista и новее;
  • Обеспечена возможность использования TLSv1.3 при сборке с библиотекой BoringSSL, а не только с OpenSSL.

© OpenNet