The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз nginx 1.16.0

23.04.2019 19:33

После года разработки представлена новая стабильная ветка высокопроизводительного 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.


  1. Главная ссылка к новости (http://mailman.nginx.org/piper...)
  2. OpenNews: Компания F5 Networks поглотила NGINX за 670 млн долларов
  3. OpenNews: Выпуск сервера приложений NGINX Unit 1.8 с поддержкой Java
  4. OpenNews: Релиз nginx 1.14.0
  5. OpenNews: Первый стабильный релиз сервера приложений NGINX Unit
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/50561-nginx
Ключевые слова: nginx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (43) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 19:35, 23/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нормально так сысоев начал клепать версии, после того как заработал
     
     
  • 2.2, имя (?), 20:13, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Да если бы:

    $ hg log -r 'tag(release-1.15.0)::tag(release-1.16.0)' -T '{author}\n' | sort | uniq -c | sort -nr
        111 Maxim Dounin <mdounin@mdounin.ru>
         20 Ruslan Ermilov <ru@nginx.com>
         17 Sergey Kandaurov <pluknet@nginx.com>
         13 Vladimir Homutov <vl@nginx.com>
         13 Roman Arutyunyan <arut@nginx.com>
          2 Valentin Bartenev <vbart@nginx.com>
          2 Maxim Konovalov <maxim@nginx.com>
          2 Gena Makhomed <gmm@csdoc.com>
          1 Nova DasSarma <nova@novalinium.com>
          1 Nikolay Morozov <n.morozov@securitycode.ru>
          1 chronolaw <chronolaw@gmail.com>
          1 Chanhun Jeong <chanhun.jeong@navercorp.com>

     
     
  • 3.30, Аноним (30), 11:41, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    А вот и список копирастов.
     
  • 2.3, Аноним (3), 20:21, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Ты ещё наверно в Санта-Клауса веришь? Это всё копирасты наклепали и зондов понаставили. А то что тебе это пытаются теперь втюхать и так радостно это поедаешь означает что они всё правильно сделали.
     
     
  • 3.6, Аноним (6), 20:44, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да. Лучше и не скажешь (азазаза)
     
  • 3.15, Oleg (??), 22:23, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Т.е. то, что код выложен в рид онли моде, тебя все еще не устраивает?
     
     
  • 4.27, Andrey Mitrofanov (?), 09:42, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Т.е. то, что код выложен в рид онли моде, тебя все еще
    > не устраивает?

    И меня не устраивает. http://www.opennet.ru/openforum/vsluhforumID3/40483.html#18

    И папу Эрика не устраивает. http://esr.ibiblio.org/?p=8287

    И... в кого ни ткни, тоже не устраивает.

    Один ты топишь за шкурные интересы шкурных шкур.

     
     
  • 5.35, Аноним (35), 06:33, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не нравится - не пользуйся. Чего вонять то?
    Мне вот не нравится расползание рака GPL, который чего не коснись заражает. Еще и захват средств производства которым пытались диктовать условия (да да, мы все еще помним о той случайной "ошибке" с забытыми исключениями в gcc).

    Слава богу есть clang который этим не страдает.

     
     
  • 6.38, Andrey Mitrofanov (?), 13:46, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Не нравится - не пользуйся. Чего вонять то?

    Я, видишь ли, не "про код".

    А про пропагандистов и пушеров, как ты.

    Сделай вид, что не понял, снова?

    > Мне вот не
    > Слава богу есть

    Ну, то есть санта-клаус.  Ну, лан.


     
  • 3.25, Аноним (25), 07:59, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    У Вас зонд отклеился
     
  • 3.31, Аноним (30), 11:41, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Копирасты минусуют.
     
  • 2.19, Аноним (19), 23:31, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Сысоев давно уже другой сервер пилит.
     

  • 1.4, Аноним (3), 20:23, 23/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    Печаль хороший был продукт.
     
  • 1.5, Аноним (5), 20:38, 23/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Добавили бы поддержку логических операторов в if, и цены бы не было.
     
     
  • 2.8, Ключевский (?), 20:48, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Игорь всегда говорил, что если ты используешь в конфиге nginx'а if, то значит что-то не так с твоим конфигом и так делать не надо.
     
     
  • 3.10, Аноним (5), 20:57, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Предложи более удобный способ блокировок по заголовкам запроса.
     
     
  • 4.11, xXxSPYxXx (ok), 21:07, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    map
     
     
  • 5.12, Аноним (6), 21:31, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ииииии потом IF да ?
     
     
  • 6.13, xXxSPYxXx (ok), 21:36, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Там if используется уже в другом контексте, обычно с return, что законно.
     
     
  • 7.16, Аноним (16), 22:25, 23/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ну началось.. Речь идет о замене if на map, а не о "тут if можно, а тут нельзя".
    map позволяет неудобный список регулярок оформить в одной легко читаемой конструкции и сэкономить ресурсы на обработке запроса. Заменой if'у он не является, увы и ах.
     
     
  • 8.20, Аноним (20), 02:21, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А почему Вам Lua не подходит для скриптования ... текст свёрнут, показать
     
     
  • 9.22, Аноним (22), 05:42, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Там массивы с 1 начинаются ННЖНО... текст свёрнут, показать
     
  • 4.21, Аноним (21), 03:33, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нормальным способом было бы реализовать if или его аналог не на уровне модуля rewrite, а на уровне http_core_module - так, чтобы они были равноправны с location. Ну или расширить сам location, позволив писать дополнительные условия типа location /foo when ($somevar = 1) { ... }.

    Это неоднократно обсуждалось уже много лет назад, вкратце - слишком много надо переделывать.

     
  • 3.29, нах (?), 10:36, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    с конфигом nginx'а определенно что-то не так - тривиальные вещи требуют нетривиальнейших ухищрений, угадать не заглядывая в код, как работают вложенные конструкции - невозможно (половина if'овых проблем от этого) и т д.

    зато у нас есть *два* файлика с набором никем и никогда не меняемых настроек для fcgi_proxy - угадайте, почему их два и какой правильный (и почему миллион никем никогда обычно не переопределяемых дефолтов вообще нужно каждый раз include'ом подпихивать в каждый блок с прокси)?

    но, поскольку автору оно уже давно неинтересно, он свои дивиденды и так получает, а Максим не революционер, шансов что эту причудливую мешанину заменят вменяемым синтаксисом ровно ноль.

    зато, да, давайте завезем в конфиги несколько нескучных язычков, чтоб никому не скучать.

     
     
  • 4.34, KonstantinB (ok), 22:31, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    If - да, жуткий костыль, для понимания которого надо знать, в какой последовательности работают какие фазы обработки запроса, и что происходит на фазе rewrite. Это, конечно, ужасно. Тут работает правило "внутри if-а пишем только директивы модуля rewrite" - тогда ничего странного не случится.

    А с вложенными location-ами надо один раз разобраться с правилами наследования и все становится ясно. Вот хорошая статья на тему: https://blog.martinfjordvald.com/2012/08/understanding-the-nginx-configuration

     
     
  • 5.39, пох (?), 20:20, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А с вложенными location-ами надо один раз разобраться с правилами наследования и все становится
    > ясно

    становится ясно что ничего не ясно.
    Вот вам из вашего любимого талмуда:

    The behaviour of a directive is actually entirely up to the module that defines it. All the normal and array directives will inherit properly if they are allowed in that context. For action directives the story is a bit different. Generally they will not inherit into a nested location but it ultimately depends on how the module wants it to be and it can differ on a directive by directive basis.

    То есть как работает конкретная команда - "а вот угадай!"

    зачем и для чего была понаделана такая неведомая хня вместо иерархического наследования и возможности явно сбросить "array" если вдруг надо (надо крайне редко) - спросите у автора.

    Как и почему нельзя нормально пометить директивы в документации, какая из них array, какая не array. (впрочем, это бы не помогло, поскольку всерьез натыкаешься на новые грабли обычно с 3d party модулем, автор которого хорошо если вообще его документировал)

     

  • 1.17, Аноним (17), 22:37, 23/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    >Объявлена устаревшей директива "ssl", на смену которой пришёл параметр "ssl"

    посоны-то и не в курсе, что сам SSL давно взломан и устарел.

     
     
  • 2.24, iPony (?), 07:45, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    🤦
     
  • 2.26, немезидеЦ (?), 08:14, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а посан-то и не в курсе, что ssl это просто название, а реально протоколы какие сам подключишь, хоть SSL разных версий, хоть различных TLS. =))
     

  • 1.23, Нэээ (?), 06:17, 24/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну наконец tcp keepalive к апстримам появился!
     
     
  • 2.28, нах (?), 10:29, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    это у кого как. У некоторых, вообще-то появился его выключатель.

    sysctl net.inet.tcp.always_keepalive
    net.inet.tcp.always_keepalive: 1

    это стандартная настройка.

     
     
  • 3.33, Нэээ (?), 20:19, 24/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В оси он у тебя и так был. А вот в nginx не было как класса
     
     
  • 4.40, пох (?), 20:22, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > В оси он у тебя и так был. А вот в nginx не было как класса

    чтобы его там "не было как класса" - нужно _специально_ открыть сокет и вручную setsockopt'ом выключить этот режим.


      

     
     
  • 5.41, Нэээ (?), 23:40, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Все почти так, только наоборот. Его как надо явно включить через setsockopt. Иначе его нет.
     
     
  • 6.42, пох (?), 12:14, 26/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    для бестолковых - вам показали настройку, которая в системе из коробки, и которая делает что он - есть, пока явно не попросишь выключить.

     
     
  • 7.43, Нэээ (?), 08:17, 27/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Для совсем бестолковых:
    Эта настройка sysctl , что привели ранее, отключает или включает в ядре поддержку tcp keepalive на общесистемном уровне.
    Но если вы в своем приложении явно не попросили ядро через setsockopt включить для вашего сокета tcp kerpalive, то его просто так там не образуется и не важно что там в sysctl.

    Так вот речь в новости о том, что в nginx наконец появилась опция "попросить ядро о tcp kerpalive в сокете к апстриму". Дальше уtcp keepalive в сокете появится или нет в зависимости от того включен ли он на общесистемном уровне.

     

  • 1.32, rihad (ok), 16:57, 24/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Жаль что модуль brotli так и не начали строить по умолчанию на FreeBSD. Только из-за этого приходится из портов ставить, а не из пакетов.
     
     
  • 2.36, KonstantinB (ok), 13:27, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Будь мужиком, собери свой пакет!
     
     
  • 3.37, rihad (ok), 13:32, 25/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Будь мужиком, собери свой пакет!

    Простите, уже вырос с того возраста ) Сейчас нужен только достаточный результат с минимальными усилиями.

     

  • 1.44, Аноним (44), 13:29, 11/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Плиз дайте Алмазы)
     
     
  • 2.46, MoxHaTblu (?), 18:31, 12/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Иди уголь долби...
     

  • 1.45, Аноним (44), 13:29, 11/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Дайти альмадики))
     
  • 1.47, Дмитро (?), 20:29, 07/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я  стирав  карточки  від  нової  пошти  і  виграв  гелексі  самсунг
    с10.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру