The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 , opennews (??), 16-Апр-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


25. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +/
Сообщение от Ilya Indigo (ok), 17-Апр-24, 09:41 
У вас не возникало необходимости из nginx обратиться к redis?

У меня появилось необходимость это сделать, что бы прочитать сессионный ключ пользователя из кук, затем обратится к redis, он обрабатывает php-сессии, чтобы получить id пользователя из сессии по этому ключу, если он есть, а затем сравнить его с id из URL и решить можно ли отдавать пользователю это изображение или вернуть 403.

Я собрал модули
http-redis https://build.opensuse.org/package/show/home:13ilya/nginx-mo...
и
redis2 https://build.opensuse.org/package/show/home:13ilya/nginx-mo...,
но они, к сожалению, оказались бесполезными для этой задачи.
http-redis используется только для кеширования и может только получить по ключу данные и целиком их отправить в stdout,
а redis2 может только сохранять, так как при получение каких-либо данных он эти данные вместе с отладочной информацией, аналогичной при работе с redis-cli сразу отправляет в stdout и их не возможно сохранить в переменную и обработать для принятия дальнейшего решения.

Я так понял, единственный выход это сделать через OpenResty или модуль lua.
OpenResty, почему-то не собирает ни один дистрибутив, не смотря на совместимую с GPL лицензию, и предлагается подключать сторонние репозитории, в которых даже nginx поставлается свой. Этот вариант мне не очень нравится, но даже так там нет репозитория для OpenSUSE Tumbleweed, только для openSUSE Leap.

Попробовал для начала собрать lua модуль сам https://build.opensuse.org/package/show/home:13ilya/nginx-mo...
и запнулся над тем, что ему нужен luajit с поддержкой FFI

checking for Lua language 5.1 ... found
checking for LuaJIT has FFI ... not found
./configure: error: unsupported LuaJIT build; ngx_http_lua_module requires LuaJIT with FFI enabled.

При этом в апстиме сказано что поддержка FFI включена по умолчанию,
https://luajit.org/ext_ffi_tutorial.html
и в downstream я не нашёл её отключения.
https://build.opensuse.org/package/show/devel:languages:lua/...

На этом пока и запнулся. :-(
Может у вас есть опыт со сборкой  OpenResty или тем как решить подобную задачу обращения nginx к redis?

Ответить | Правка | Наверх | Cообщить модератору

26. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +1 +/
Сообщение от 1 (??), 17-Апр-24, 10:05 
Хм ... вроде Lua нормально к nginx подключается - всё по мануалу.

===================== ну типа заметки, надо бы функцию на opennet скрывать под котом :-) ==================
Lua

Alternatively, ngx_lua can be manually compiled into Nginx:

    LuaJIT can be downloaded from the latest release of OpenResty's LuaJIT fork. The official LuaJIT 2.x releases are also supported, although performance will be significantly lower for reasons elaborated above

$ git clone https://github.com/openresty/luajit2
$ cd luajit2
$ make
$ sudo make install

(Возможно будет работать с стандартным libluajit-5.1-dev после apt-get install libluajit-5.1-dev.)

    Download the latest version of the ngx_devel_kit (NDK) module HERE (git clone https://github.com/vision5/ngx_devel_kit)
    Download the latest version of ngx_lua HERE (git clone https://github.com/openresty/lua-nginx-module)
    Download the latest supported version of Nginx HERE (See Nginx Compatibility) nginx-1.19.9.tar.gz

Распаковываем в modules Указываем - куда установлен luajit (в нашем случае /usr/local)

export LUAJIT_LIB=/path/to/luajit/lib
export LUAJIT_INC=/path/to/luajit/include/luajit-2.1

Добавляем в configure -

--add-module=modules/ngx_devel_kit \
--add-module=modules/lua-nginx-module \
--add-module=modules/ModSecurity-nginx

или

--add-dynamic-module=modules/ngx_devel_kit \
--add-dynamic-module=modules/lua-nginx-module \
--add-dynamic-module=modules/ModSecurity-nginx

Ответить | Правка | Наверх | Cообщить модератору

48. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +/
Сообщение от Ilya Indigo (ok), 19-Апр-24, 11:03 
Благодарю!
Вся моя проблема была в отсутствии 2-ой строки.

export LUAJIT_INC=%{_includedir}/luajit-5_1-2.1
export LUAJIT_LIB=%{_libdir}

Видимо если переопределяю LUAJIT_INC то нужно сразу и переопределить LUAJIT_LIB даже если она стандартная.

Луамодуль собрал, буду собирать lua-resty-redis.

P.S. /var/log/nginx/error.log

2024/04/19 11:21:48 [alert] 23985#23985: detected a LuaJIT version which is not OpenResty's; many optimizations will be disabled and performance will be compromised (see https://github.com/openresty/luajit2 for OpenResty's LuaJIT or, even better, consider using the OpenResty releases from https://openresty.org/en/download.html)
2024/04/19 11:21:48 [alert] 23985#23985: failed to load the 'resty.core' module (https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found:
    no field package.preload['resty.core']
    no file './resty/core.lua'
    no file '/usr/share/luajit-5_1-2.1/resty/core.lua'
    no file '/usr/local/share/lua/5.1/resty/core.lua'
    no file '/usr/local/share/lua/5.1/resty/core/init.lua'
    no file '/usr/share/lua/5.1/resty/core.lua'
    no file '/usr/share/lua/5.1/resty/core/init.lua'
    no file './resty/core.so'
    no file '/usr/local/lib/lua/5.1/resty/core.so'
    no file '/usr/lib64/lua/5.1/resty/core.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file './resty.so'
    no file '/usr/local/lib/lua/5.1/resty.so'
    no file '/usr/lib64/lua/5.1/resty.so'
    no file '/usr/local/lib/lua/5.1/loadall.so') in /etc/nginx/nginx.conf:67

Ещё и lua-resty-core нужен.

Ответить | Правка | Наверх | Cообщить модератору

28. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +1 +/
Сообщение от 1 (??), 17-Апр-24, 10:13 
Чуть не забыл -
lua_package_path "/usr/share/nginx/lib/lua/?.lua;;";
в секцию http.
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

40. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +/
Сообщение от Аноним (39), 17-Апр-24, 19:04 
Зачем тащить это всё в event loop сервера?
Если что, исполнение lua там блокирующее, так что если redis отвалится — встанет весь веб-сервер.

Лучше сделайте external authz https://docs.nginx.com/nginx/admin-guide/security-controls/c.../

Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

44. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +/
Сообщение от Ilya Indigo (ok), 18-Апр-24, 09:02 
Вы вообще читали изначальную техническую задачу, 2-ой абзац?

> Зачем тащить это всё в event loop сервера?

Затем, что в nginx и в его кучи новодельных форках нету простой возможности обратиться к redis и получать от него данные. Мне самому этот луа 300 лет не нужен, но по другому к redis не обратиться, а вешать отдачу статики на php-fpm мне очень не хочется.

> Лучше сделайте external authz https://docs.nginx.com/nginx/admin-guide/security-controls/c.../

И как этот external authz будет обращаться к redis?

Ответить | Правка | Наверх | Cообщить модератору

49. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  –1 +/
Сообщение от Аноним (49), 20-Апр-24, 03:00 
Да как угодно. Десять строк кода на golang, например
Ответить | Правка | Наверх | Cообщить модератору

46. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  –1 +/
Сообщение от Alex_Kemail (??), 18-Апр-24, 20:39 
Ваша задача неплохо решится через X-Accel-Redirect
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

47. "Новые версии nginx 1.25.5 и форка FreeNginx 1.26.0 "  +/
Сообщение от Ilya Indigo (ok), 19-Апр-24, 09:12 
Моя задача НЕ решается с помощью этого заголовка!
X-Accel-Redirect может лишь более безопасно скрыть реальный путь защищённого статического контента, но обращение к redis за авторизацией он не выполнит.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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