URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 125935
[ Назад ]

Исходное сообщение
"Выпуск сервера приложений NGINX Unit 1.26.0"

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

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=56209


Содержание

Сообщения в этом обсуждении
"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 22-Ноя-21 19:50 
> /www/$host$uri

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 22-Ноя-21 23:30 
Это что то типа mod proxy в apache?

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено AntonAlekseevich , 22-Ноя-21 23:35 
> "share": "/www/data/$uri"

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 00:45 
Добро пожаловать в документацию, чтобы осознать, что $uri содержит нормализованное значение URI, ровно такое же, какое используется всеми веб-серверами, включая nginx, для открытия файлов из document root и предотвращения выхода из него.

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 09:21 
Остается только надеяться, что разработчики не накосячили с этим, как в Nginx, где вроде бы очевидный конфиг
location /aaa { proxy_pass http://bbb/ccc/; } позволяет, передав URL /aaa../ddd, обратиться к http://bbb/ddd

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 13:57 
Если почтитать доку nginx, то станет понятно, что в данном конфиге часть URL запроса "/aaa" (без слеша), будет заменена на "/ccc/" (со слешом) - такая форма рерайта.  Собственно, что пользователь в конфиге написал - ровно то и получил.  При такой замене из "/aaa../ddd" получается "/ccc/../ddd" - что с этим будет происходить дальше зависит исключительно от бекенда.

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 15:42 
> При такой замене из "/aaa../ddd" получается "/ccc/../ddd" - что с этим будет происходить дальше зависит исключительно от бекенда.
> Вина nginx тут лишь в том, что пользователи не читают документацию и невнимательны.

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

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

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 19:25 
> 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/../                                                                                                                                                                              


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 19:52 
> По этой причине лучше использовать альтернативы, у которых механизм конфигурации не является минным полем.

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

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


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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено lockywolf , 23-Ноя-21 04:22 
Зачем такие страдания? Есть же identd.

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено 1 , 23-Ноя-21 00:33 
Каких ещё приложений? Свалите со своими калькуляторами!

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 07:59 
Это что то типа mod proxy в apache?

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 08:40 
Блин, да когда уже на конец-то сделают возможность переопределения переменных окружения SERVER_NAME, SERVER_PORT и HTTPS?! Без этого приходится при каждом апдейте исходники править. Ибо ни laravel ни wordpress не работают на unit-е если трафик проксируется nginx-ом с https в http.

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 08:45 
Вот тикет на эту тему: https://github.com/nginx/unit/issues/231

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Роман , 23-Ноя-21 11:10 
поделитесь опытом, что стало значимым фактором чтобы выбрать Nginx Unit?

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

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 13:41 
>поделитесь опытом, что стало значимым фактором чтобы выбрать Nginx Unit?

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

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Роман , 23-Ноя-21 14:00 
> 1. его скорость работы: под высокой нагрузкой с php-fpm не сравнить, в некоторых случаях разница в скорости генерации страницы в 2-5 раз быстрее.

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

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

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

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Роман , 23-Ноя-21 14:02 
"для НЕ меня актуально"

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 23-Ноя-21 19:07 
> роуты приложения: хоть и у uWSGI есть и подобный функционал, но работает он медленее + не очень удобно конфигурять на серваках централизовано.

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Аноним , 24-Ноя-21 12:50 
>Речь идет об этом https://unit.nginx.org/configuration/#routes ?

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


"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено ddd2 , 23-Ноя-21 18:16 
Там хоть один российский разработчик еще остался?

"Выпуск сервера приложений NGINX Unit 1.26.0"
Отправлено Гоголь , 23-Ноя-21 23:08 
А какое отношение это имеет к "продукту"?
Главный там русский, но, опять же, что это может значить?