impeee
@impeee
nodejs/erlang developer

Как заставить nginx запускать lua скрипты через luaJIT?

Хочу возложить логику проверки jwt на плечи nginx:
https://github.com/auth0/nginx-jwt

Сервер имеет следующую конфигурацию:
server {

        listen 80;
        server_name test;

        location / {
                access_by_lua '
                local jwt = require("nginx-jwt")
                jwt.auth()
                ';
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://127.0.0.1:1338;
        }

}


В nginx.conf указал расположение lua-скриптов:
lua_package_path "/opt/test/?.lua;;";

Перезагружаю nginx, обращаюсь по http:
$ curl test
2016/09/27 15:01:57 [error] 25541#0: *399 lua entry thread aborted: runtime error: /opt/test/resty/evp.lua:4: module 'ffi' not found:


На Lua не кодил. Выяснилось, что есть две среды исполнения Lua: это собственно lua и luajit. Выяснилось, что ffi модуль - это какая-то штука с возможностью исполнения Си кода, и исполняется только посредством luajit. В моем случае скрипты выполняются посредством lua, и это завершается такой вот ошибкой (проверял в REPL).

Вопрос - как сделать так, чтобы nginx запускал эти скрипты посредством luaJIT ? Уже все излазил. Поставил OpenResty дистрибутив, собрал, установил - эффекта нет. Что делать?
  • Вопрос задан
  • 865 просмотров
Решения вопроса 1
starius
@starius
программист, аспирант МГУ
Надо устанвить LuaJIT и пересобрать nginx с LuaJIT вместо Lua.
В Debian для этого применили такой патч (баг):

diff -ruN nginx-1.6.0.orig/debian/modules/nginx-lua/config nginx-1.6.0/debian/modules/nginx-lua/config
--- nginx-1.6.0.orig/debian/modules/nginx-lua/config	2014-04-24 13:23:46.000000000 -0300
+++ nginx-1.6.0/debian/modules/nginx-lua/config	2014-07-24 03:48:10.816586362 -0300
@@ -131,9 +131,9 @@
             ngx_feature="Lua library in /usr/"
             ngx_feature_path="/usr/include/lua5.1"
             if [ $NGX_RPATH = YES ]; then
-                ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -llua5.1"
+                ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -lluajit-5.1"
             else
-                ngx_feature_libs="-L/usr/lib -lm -llua5.1"
+                ngx_feature_libs="-L/usr/lib -lm -lluajit-5.1"
             fi
             . auto/feature
         fi


```
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@anikavoi
Не надо ничего пересобирать. Все уже давно собрано за нас.

https://openresty.org/en/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы