Релиз nginx 1.20.0
20 апреля 2021 года
После года разработки представлена новая стабильная ветка высокопроизводительного 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%, два года назад 226.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.
- При исчерпании рабочим процессом свободных соединений, nginx теперь закрывает не только keepalive-соединения, но и соединения в состоянии
ожидания закрытия сокета («lingering close»).
- Код обработки соединений в HTTP/2 приближен к реализации HTTP/1.x. Поддержка отдельных настроек «http2_recv_timeout», «http2_idle_timeout» и «http2_max_requests» прекращена в пользу общих директив «keepalive_timeout» и «keepalive_requests».
- Добавлена новая опция командной строки «-e», позволяющая указать альтернативный файл для записи лога ошибок, который будет использоваться вместо лога, заданного в настройках. Вместо имени файла можно указать специальное значение stderr.
- Удалены настройки «http2_max_field_size» и «http2_max_header_size», вместо которых следует использовать «large_client_header_buffers».
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.