Путь пакетов Lua в nginx

Теперь я программирую в Lua с nginx. Я пишу файл Lua и помещаю его в каталог в /usr/local/nginx/lua. Затем в nginx.conf я пишу местоположение, например

location /lua {
    lua_need_request_body on;
    content_by_lua_file lua/test.lua;
}

Когда я получаю доступ к этому местоположению через Nginx, будет выполнен Lua script.

В файле Lua обычно можно включить свой собственный модуль Lua и указать путь поиска

common_path = '../include/?.lua;'
package.path = common_path .. package.path

В общем программировании Lua относительный путь относится к моему файлу Lua.

Но с nginx относительные пути относятся к каталогу, в котором я запускаю Nginx.

Например, я в /usr/local/nginx и выполняю sbin/nginx, тогда в Lua package.path будет /usr/local/include.

Если я нахожусь в /usr/local/nginx/sbin и выполняю ./nginx, то в Lua package.path будет /usr/local/nginx/include.

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

Ответ 1

Вы хотите изменить Lua package.path для поиска в каталоге, в котором у вас есть исходный код. Для вас это lua/.

Вы делаете это с помощью директивы lua_package_path в блоке http (документы говорят, что вы можете поместить ее на верхний уровень, но когда я пытался, чтобы это не сработало).

Итак, для вас:

http {
    #the scripts in lua/ need to refer to each other
    #but the server runs in lua/..

    lua_package_path "./lua/?.lua;;";

    ...
}

Теперь ваши сценарии lua могут находить друг друга, даже если сервер запускает один каталог вверх.

Ответ 2

Вы можете использовать префикс $ сейчас.

Например

http{
    lua_package_path "$prefix/lua/?.lua;;";
}

И начни свой nginx вот так

nginx -p /opt -c /etc/nginx.conf

Тогда путь поиска будет

/opt/lua