После года разработки представлена (http://nginx.org/?1.14) новая стабильная ветка высокопроизводительного HTTP-сервера и многопротокольного прокси-сервера nginx 1.14.0 (http://nginx.org/), которая вобрала в себя изменения, накопленные в рамках основной ветки 1.13.x. В дальнейшем все изменения в стабильной ветке 1.14 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.15, в рамках которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется (http://nginx.com/blog/nginx-1-6-1-7-released) использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus.
В соответствии с мартовским отчетом (https://news.netcraft.com/archives/2018/03/27/march-2018-web...) компании 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 млн).
По данным (https://w3techs.com/technologies/history_overview/web_server) W3Techs 38.0% из миллиона самых посещаемых сайтов в мире используют nginx, в апреле прошлого года этот показатель составлял 33.3%, позапрошлого - 29.8%. Доля Apache за год снизилась с 50% до 46.7%, а доля Microsoft IIS с 11.3% до 9.9%. В России nginx используется (http://w3techs.com/technologies/breakdown/ws-nginx/top_level...) на 78.9% самых посещаемых сайтов (год назад - 76.9%).
Из ключевых улучшений nginx 1.14.0 отмечается модуль mirror, поддержка протокола TLSv1.3, поддержка HTTP/2 push и модуль с реализацией gRPC-прокси. Наиболее заметные улучшения (http://nginx.org/ru/CHANGES.ru-1.14), добавленные в процессе формирования основной ветки 1.13.x:
- Реализован (https://www.opennet.dev/opennews/art.shtml?num=48109) механизм Server Push (https://www.w3.org/TR/preload/#server-push-http-2) для протокола HTTP/2, который предоставляет возможность отправки ресурсов от сервера к клиенту, не дожидаясь их явного запроса (например, подобным образом можно передавать файлы CSS, скрипты и изображения, которые необходимы для отрисовки страницы).Для отправки push-запросов используется уже установленное клиентом сое динение. Т.е. клиент подключается и запрашивает определённую страницу, после этого сервер на основании своих настроек или содержимого переданного клиентом заголовка Link сам инициирует передачу определённых ресурсов через уже установленное соединение HTTP/2, не дожидаясь запроса этих ресурсов от клиента;
- Добавлена поддержка протокола TLSv1.3. Для включения в директиве "ssl_protocols" следует указать параметр "TLSv1.3". Протокол поддерживается только в предстоящей версии OpenSSL 1.1.1;
- Для соединений с бэкендами разрешено повторное согласование SSL-соединения;
-
Новые модули:
- ngx_http_grpc_module (http://nginx.org/en/docs/http/ngx_http_grpc_module.html) с реализацией прокси для протокола gRPC, позволяющего (https://www.opennet.dev/opennews/art.shtml?num=48283) организовать работу микросервисов на различных языках программирования, которые взаимодействуют между собой при помощи универсального API. Сетевое взаимодействие в gRPC реализовано поверх протокола HTTP/2 и базируется на применении Protocol Buffers для сериализации данных. Модуль даёт возможность управлять потоками gRPC, выделяя отдельные сервисы и методы. Например, появляется возможность маршрутизировать gRPC по разным бэкендам, в зависимости от запрошенной операции, блокировать или ограничивать интенсивность определённых вызовов, инспектировать трафик gRPC или организовывать балансировку нагрузки;
- ngx_http_mirror_module (http://nginx.org/en/docs/http/ngx_http_mirror_module.html), позволяющий зеркалировать поступающие запросы на другие серверы. Клиенту возвращается результат обработки запроса от основного обработчика, а результаты, возвращённые зеркалируемыми бэкендами, игнорируются. При помощи зеркалирования можно достаточно просто организовать работу синхронно обновляемого резервного сервера для таких сайтов, как web-форумы;
-
Изменения в директивах:
- Через параметр proxy_protocol в директиве listen (https://nginx.ru/en/docs/http/ngx_http_core_module.html#listen) теперь можно включить вторую версию протокола PROXY (http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt);
- В реализацию SSI-директивы "include (https://nginx.ru/en/docs/http/ngx_http_ssi_module.html#commands)" добавлена возможность использования параметра "set" для сохранения в переменную содержимого произвольных ответов. Максимальный размер ответа ограничивается значением директивы
"subrequest_output_buffer_size";
- В директиву "log_format (https://nginx.ru/en/docs/http/ngx_http_log_module.html#log_f...)" добавлен параметр "escape=none" для отключения экранирования символов при записи в лог;
- В директиву set_real_ip_from в качестве параметра добавлена возможность указывать имя хоста;
- Добавлена поддержка использования директив return и error_page для возврата перенаправлений для запросов с HTTP кодом 308;
-
Изменения в модулях:
- В модуле ngx_stream_ssl_preread_module (http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_modul...) реализована переменная $ssl_preread_alpn_protocols (http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_modul...);
- В модуле ngx_http_headers (http://nginx.org/en/docs/http/ngx_http_headers_module.html) реализована директива "add_trailer (http://mailman.nginx.org/pipermail/nginx-devel/2017-April/00...)", через которую можно определить дополнительное поле, которое будет добавлено в конец ответа, если код ответа равен 200, 201, 206, 301, 302, 303, 307 или 308;
- В модулях mail_proxy и stream в директиве "listen" появились поддержка параметров "rcvbuf" и "sndbuf", позволяющих настроить размер буфера приёма (параметр SO_RCVBUF) и передачи (параметр SO_SNDBUF);
-
Разное:
- Представлена переменная $ssl_client_escaped_cert (https://forum.nginx.org/read.php?29,276124,276124), в которой сохраняется SSL-сертификат в экранированном однострочном представлении URL-encoded, что позволяет сразу использовать данный сертификат в параметрах HTTP-запросов и в заголовках;
- Улучшено определение размера кэша процессора;
- Внесены исправления в обработку дат до 1970 года и после 10000 года;
- Улучшена поддержка платформы Windows: налажена работа чистки кэша в соответствии с лимитом, заданным через параметр "max_size", решены проблемы с выделением разделяемой памяти, обеспечена работа директивы "ssl_session_ticket_key" и параметра "include" директивы "geo";
- При отражении в логе сигналов в лог теперь записывается и PID процесса, отправившего сигнал.
URL: http://mailman.nginx.org/pipermail/nginx-ru-announce/2018/00...
Новость: https://www.opennet.dev/opennews/art.shtml?num=48454