Релиз nginx 1.14.0

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

В соответствии с мартовским отчетом компании Netcraft nginx используется на 23.76% (год назад 19.55%, два года назад 16.81%) всех активных сайтов, что соответствует второму месту по популярности в данной категории (доля Apache соответствует 43.03%, Google — 7.71%, а Microsoft IIS — 6.75%). Доля nginx среди всех сайтов составляет 23.11% (год назад 19.91%, два года назад 13.23%), среди миллиона самых посещаемых сайтов в мире — 23.76% (год назад 25.64%, два года назад 21.43%). В настоящее время под управлением nginx работает около 409 млн сайтов (год назад 350 млн). По данным W3Techs 38.0% из миллиона самых посещаемых сайтов в мире используют nginx, в апреле прошлого года этот показатель составлял 33.3%, позапрошлого — 29.8%. Доля Apache за год снизилась с 50% до 46.7%, а доля Microsoft IIS с 11.3% до 9.9%. В России nginx используется на 78.9% самых посещаемых сайтов (год назад — 76.9%).

Из ключевых улучшений nginx 1.14.0 отмечается модуль mirror, поддержка протокола TLSv1.3, поддержка HTTP/2 push и модуль с реализацией gRPC-прокси. Наиболее заметные улучшения, добавленные в процессе формирования основной ветки 1.13.x:

  • Реализован механизм Server Push для протокола HTTP/2, который предоставляет возможность отправки ресурсов от сервера к клиенту, не дожидаясь их явного запроса (например, подобным образом можно передавать файлы CSS, скрипты и изображения, которые необходимы для отрисовки страницы).Для отправки push-запросов используется уже установленное клиентом сое динение. Т.е. клиент подключается и запрашивает определённую страницу, после этого сервер на основании своих настроек или содержимого переданного клиентом заголовка Link сам инициирует передачу определённых ресурсов через уже установленное соединение HTTP/2, не дожидаясь запроса этих ресурсов от клиента;
  • Добавлена поддержка протокола TLSv1.3. Для включения в директиве «ssl_protocols» следует указать параметр «TLSv1.3». Протокол поддерживается только в предстоящей версии OpenSSL 1.1.1;
  • Для соединений с бэкендами разрешено повторное согласование SSL-соединения;
  • Новые модули:
    • ngx_http_grpc_module с реализацией прокси для протокола gRPC, позволяющего организовать работу микросервисов на различных языках программирования, которые взаимодействуют между собой при помощи универсального API. Сетевое взаимодействие в gRPC реализовано поверх протокола HTTP/2 и базируется на применении Protocol Buffers для сериализации данных. Модуль даёт возможность управлять потоками gRPC, выделяя отдельные сервисы и методы. Например, появляется возможность маршрутизировать gRPC по разным бэкендам, в зависимости от запрошенной операции, блокировать или ограничивать интенсивность определённых вызовов, инспектировать трафик gRPC или организовывать балансировку нагрузки;
    • ngx_http_mirror_module, позволяющий зеркалировать поступающие запросы на другие серверы. Клиенту возвращается результат обработки запроса от основного обработчика, а результаты, возвращённые зеркалируемыми бэкендами, игнорируются. При помощи зеркалирования можно достаточно просто организовать работу синхронно обновляемого резервного сервера для таких сайтов, как web-форумы;
  • Изменения в директивах:
    • Через параметр proxy_protocol в директиве listen теперь можно включить вторую версию протокола PROXY;
    • В реализацию SSI-директивы «include» добавлена возможность использования параметра «set» для сохранения в переменную содержимого произвольных ответов. Максимальный размер ответа ограничивается значением директивы «subrequest_output_buffer_size»;
    • В директиву «log_format» добавлен параметр «escape=none» для отключения экранирования символов при записи в лог;
    • В директиву set_real_ip_from в качестве параметра добавлена возможность указывать имя хоста;
    • Добавлена поддержка использования директив return и error_page для возврата перенаправлений для запросов с HTTP кодом 308;
  • Изменения в модулях:
    • В модуле ngx_stream_ssl_preread_module реализована переменная $ssl_preread_alpn_protocols;
    • В модуле ngx_http_headers реализована директива «add_trailer», через которую можно определить дополнительное поле, которое будет добавлено в конец ответа, если код ответа равен 200, 201, 206, 301, 302, 303, 307 или 308;
    • В модулях mail_proxy и stream в директиве «listen» появились поддержка параметров «rcvbuf» и «sndbuf», позволяющих настроить размер буфера приёма (параметр SO_RCVBUF) и передачи (параметр SO_SNDBUF);
  • Разное:
    • Представлена переменная $ssl_client_escaped_cert, в которой сохраняется SSL-сертификат в экранированном однострочном представлении URL-encoded, что позволяет сразу использовать данный сертификат в параметрах HTTP-запросов и в заголовках;
    • Улучшено определение размера кэша процессора;
    • Внесены исправления в обработку дат до 1970 года и после 10000 года;
    • Улучшена поддержка платформы Windows: налажена работа чистки кэша в соответствии с лимитом, заданным через параметр «max_size», решены проблемы с выделением разделяемой памяти, обеспечена работа директивы «ssl_session_ticket_key» и параметра «include» директивы «geo»;
    • При отражении в логе сигналов в лог теперь записывается и PID процесса, отправившего сигнал.

© OpenNet