The OpenNET Project / Index page

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

Выпуск сервера приложений NGINX Unit 1.26.0

22.11.2021 18:59

Состоялся выпуск сервера приложений NGINX Unit 1.26.0, в рамках которого развивается решение для обеспечения запуска web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js и Java). Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, параметры запуска которых можно изменять динамически без необходимости правки файлов конфигурации и перезапуска. Код написан на языке Си и распространяется под лицензией Apache 2.0. С особенностями NGINX Unit можно познакомиться в анонсе первого выпуска.

В новой версии:

  • Внесено изменение в опцию "share" в которой теперь указывается полный путь к файлам вместо корневого каталога документа, который раньше добавлялся в URI запроса;
  • Добавлена автоматическая подстройка существующих конфигураций под новые опции "share" при обновлении с предыдущих версий;
  • В опции "share" добавлена поддержка переменных. Например:
    
       {
          "share": "/www/data/$uri"
       }
    
  • В опции "share" добавлена поддержка несколько путей. Например:
    
       {
          "share": [
              "/www/$host$uri",
              "/www/static$uri",
              "/www/app.html"
          ]
      }
    
  • В опции chroot добавлена поддержка переменных;
  • Добавлена поддержка совместного использования opcache в PHP между процессами приложения;
  • Добавлена поддержка маршрутизации запроса по строке запроса;
  • Исправлена ошибка выхода из строя процессов роутера и приложения при достижение лимита запросов асинхронными или многопоточными приложениями;
  • Исправлена ошибка остановки чтения фреймов установленного соединения WebSocket от клиента после того, как соответствующий обработчик был перенастроен;
  • Исправлена сборка с библиотекой glibc 2.34, проявляющаяся, в частности, в Fedora 35.


  1. Главная ссылка к новости (https://mailman.nginx.org/pipe...)
  2. OpenNews: Релиз nginx 1.20.2
  3. OpenNews: Выпуск сервера приложений NGINX Unit 1.24.0
  4. OpenNews: Спор о правах Rambler на Nginx продолжен в суде США
Автор новости: eRIC
Тип: Программы
Короткая ссылка: https://opennet.ru/56209-nginx
Ключевые слова: nginx, unit
Поддержать дальнейшую публикацию новостей на OpenNET.


Обсуждение (22) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 19:50, 22/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > /www/$host$uri

    А как там с санитизацией?
    Nginx, помнится, этим очень славен https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/

     
  • 1.4, Аноним (4), 23:30, 22/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Это что то типа mod proxy в apache?
     
  • 1.5, AntonAlekseevich (ok), 23:35, 22/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > "share": "/www/data/$uri"

    Мда... (Условно) Добро пожаловать в мир прочтенного "/www/data/../../etc/passwd" если будет жить как говорится установленным в localhost и запущенным от имеющего право на чтение данного файла в том числе через мандатный контроль доступа.

     
     
  • 2.7, Аноним (7), 00:45, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Добро пожаловать в документацию, чтобы осознать, что $uri содержит нормализованное значение URI, ровно такое же, какое используется всеми веб-серверами, включая nginx, для открытия файлов из document root и предотвращения выхода из него.
     
     
  • 3.12, Аноним (3), 09:21, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Остается только надеяться, что разработчики не накосячили с этим, как в Nginx, где вроде бы очевидный конфиг
    location /aaa { proxy_pass http://bbb/ccc/; } позволяет, передав URL /aaa../ddd, обратиться к http://bbb/ddd
     
     
  • 4.15, Аноним (7), 13:57, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Если почтитать доку nginx, то станет понятно, что в данном конфиге часть URL запроса "/aaa" (без слеша), будет заменена на "/ccc/" (со слешом) - такая форма рерайта.  Собственно, что пользователь в конфиге написал - ровно то и получил.  При такой замене из "/aaa../ddd" получается "/ccc/../ddd" - что с этим будет происходить дальше зависит исключительно от бекенда.

    Вина nginx тут лишь в том, что пользователи не читают документацию и невнимательны.  Выстрелить себе в ногу с рерайтами в любой форме - можно миллионом разных способов с любым софтом. По этой причине конфигурацией веб-севера наверное стоит доверять не домохозяйке, а кому-то компетентнее.

     
     
  • 5.18, Аноним (3), 15:42, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > При такой замене из "/aaa../ddd" получается "/ccc/../ddd" - что с этим будет происходить дальше зависит исключительно от бекенда.
    > Вина nginx тут лишь в том, что пользователи не читают документацию и невнимательны.

    Вы, кстати, не исключение :)
    Nginx нормализует URL перед передачей в бэкенд, так что туда отправится уже /ddd.

    > Выстрелить себе в ногу с рерайтами в любой форме - можно миллионом разных способов с любым софтом. По этой причине конфигурацией веб-севера наверное стоит доверять не домохозяйке, а кому-то компетентнее.

    По этой причине лучше использовать альтернативы, у которых механизм конфигурации не является минным полем.

     
     
  • 6.21, Аноним (7), 19:25, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Nginx нормализует URL перед передачей в бэкенд, так что туда отправится уже /ddd.

    Он нормализует его не перед отправкой на бекенд, а перед реврайтом, перед заменой части из location.  А результат замены уже отправится на бекенд, т.е. на бекенд уйдет запрос к "/ccc/../ddd".  Попробуйте сами, если не верите (только убедитесь, что сам бекенд не нормализует пришедший к нему URL).




    events {}

    http {
        server {
            listen 8000;

            location /aaa {
                proxy_pass http://127.0.0.1:8001/bbb/;
            }
        }

        server {
            listen 8001;

            location / {
                return 200 "$request_uri";
            }
        }
    }





    $ curl 127.0.0.1:8000/aaa../
    /bbb/../                                                                                                                                                                              



     
  • 6.22, Аноним (7), 19:52, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > По этой причине лучше использовать альтернативы, у которых механизм конфигурации не является минным полем.

    Ну так в каком альтернативном сервере вы бы ни написали команду: "в URL вместо букв /aaa подставь буквы /bbb/" - результат такой замены будет одинаковый.  А ровно такая команда в конфиграции nginx и написана.

    Можно ещё с тем же успехом команду sed ругать:


    $ echo '/aaa../ddd' | sed 's+/aaa+/ccc/+'
    /ccc/../ddd



     
  • 2.8, lockywolf (ok), 04:22, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем такие страдания? Есть же identd.
     

  • 1.6, 1 (??), 00:33, 23/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Каких ещё приложений? Свалите со своими калькуляторами!
     
  • 1.9, Аноним (4), 07:59, 23/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это что то типа mod proxy в apache?
     
  • 1.10, Аноним (10), 08:40, 23/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Блин, да когда уже на конец-то сделают возможность переопределения переменных окружения SERVER_NAME, SERVER_PORT и HTTPS?! Без этого приходится при каждом апдейте исходники править. Ибо ни laravel ни wordpress не работают на unit-е если трафик проксируется nginx-ом с https в http.

    Разработчики какую-то хрень непонятную пилят при этом самое базовое никак не могут реализовать... Печаль...

     
     
  • 2.11, Аноним (10), 08:45, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот тикет на эту тему: https://github.com/nginx/unit/issues/231
     
  • 2.13, Роман (??), 11:10, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    поделитесь опытом, что стало значимым фактором чтобы выбрать Nginx Unit?

    мне позиционирование продукта понятно не до конца, юзкейсов для себя не вижу. Предполагаю что
    > The entire configuration is managed dynamically over HTTP via a friendly RESTful JSON API

    кому-то обмазанному кубернейтисом нужно и может в даже мне, но (пока?) этот момент без разницы

     
     
  • 3.14, Аноним (10), 13:41, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >поделитесь опытом, что стало значимым фактором чтобы выбрать Nginx Unit?

    1. его скорость работы: под высокой нагрузкой с php-fpm не сравнить, в некоторых случаях разница в скорости генерации страницы в 2-5 раз быстрее. На хайлод проекте (сайт одной из популярных СМИ) это важный фактор.
    2. поддержка множества языков: раньше нужно было настраивать апликейшин сервер для каждого языка свой. Частично проблема решалась при помощи uWSGI, но там тоже есть свои заморочки и проблемы. Unit стал отличной альтернативой uWSGI, к тому же чуток быстрее.
    3. все таки конфигурация через апи куда удобнее если менеджить большой кластер. Раньше приходилось костылять скрипты для редактирования конфигов uWSGI и ходить по ssh на все серваки меняя их sed-ом.
    4. роуты приложения: хоть и у uWSGI есть и подобный функционал, но работает он медленее + не очень удобно конфигурять на серваках централизовано.

    Это первое что пришло в голову. Если подумать, можно вспомнить еще пару пунктов.

     
     
  • 4.16, Роман (??), 14:00, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > 1. его скорость работы: под высокой нагрузкой с php-fpm не сравнить, в некоторых случаях разница в скорости генерации страницы в 2-5 раз быстрее.

    Самый странный для меня пункт, но окей, тут можно самому протестировать и понять.

    > 3. все таки конфигурация через апи куда удобнее если менеджить большой кластер. Раньше приходилось костылять скрипты для редактирования конфигов uWSGI и ходить по ssh на все серваки меняя их sed-ом.

    Самый спорный для меня пункт, но возможно кому-то так действительно проще

    Про остальное понятно (для меня актуально, так как не проблема менеджить nginx locations на разные бэкенды), спасибо.

     
     
  • 5.17, Роман (??), 14:02, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    "для НЕ меня актуально"
     
  • 4.20, Аноним (3), 19:07, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > роуты приложения: хоть и у uWSGI есть и подобный функционал, но работает он медленее + не очень удобно конфигурять на серваках централизовано.

    Речь идет об этом https://unit.nginx.org/configuration/#routes ?

     
     
  • 5.24, Аноним (10), 12:50, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Речь идет об этом https://unit.nginx.org/configuration/#routes ?

    Да, они самые.

     

  • 1.19, ddd2 (?), 18:16, 23/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Там хоть один российский разработчик еще остался?
     
     
  • 2.23, Гоголь (?), 23:08, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А какое отношение это имеет к "продукту"?
    Главный там русский, но, опять же, что это может значить?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:
    При перепечатке указание ссылки на opennet.ru обязательно



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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