NGINX虚拟主机使用单独的lua_package_path变量
我正在尝试使用NGINX作为虚拟主机来服务于两个(Openresty)Lua Web应用程序,它们都需要自己独特的lua_package_path,但很难得到正确的配置。
# 配置文件 example.conf
http {
lua_package_path = "/path/to/app/?.lua;;"
server{
listen 80;
server_name example.org
}
}
http {
lua_package_path = "/path/to/dev_app/?.lua;;"
server{
listen 80;
server_name dev.example.org
}
}
如果您将
http定义两次(每个主机一个),则会收到此错误:[emerg]"http"指令在example.conf中重复如果您在
server块内定义lua_package_path,则会收到此错误:[emerg] "lua_package_path"指令在example.conf中不允许如果您在
http块中两次定义lua_package_path(这也没有任何意义),则会收到此错误:[emerg] "lua_package_path"指令在example.conf中重复
使用其自己的lua_package_path来服务于多个(Openresty)Lua应用程序,以及作为在同一IP和端口上的虚拟主机,最佳实践是什么?
我将 lua_package_path 从 NGINX 配置中移除(因为 OpenResty 捆绑包已经负责加载包),并将 content_by_lua_file 指向我的应用的绝对完整路径:/var/www/app/app.lua,从而解决了这个问题。
# example.conf
http {
server{
listen 80;
server_name example.org
location / {
content_by_lua_file '/var/www/app/app.lua';
}
}
server{
listen 80;
server_name dev.example.org
location / {
content_by_lua_file '/var/www/app_dev/app.lua';
}
}
}
然后我在 app.lua 文件顶部加入了以下内容:
-- app.lua
-- 获取 app.lua 的当前路径
local function script_path()
local str = debug.getinfo(2, "S").source:sub(2)
return str:match("(.*/)")
end
-- 将当前路径添加到包路径中
package.path = script_path() .. '?.lua;' .. package.path
-- 加载 config.lua 包
local config = require("config")
-- 使用 config
config.env()['redis']['host']
...
这允许我从与 app.lua 相同的目录中读取 config.lua。
-- config.lua
module('config', package.seeall)
function env()
return {
env="development",
redis={
host="127.0.0.1",
port="6379"
}
}
end
使用这个方法,我现在可以在不同的虚拟主机中使用它们自己的包路径。
@Vyacheslav 感谢您提供 package.path = './mylib/?.lua;' .. package.path 的指针!这确实很有帮助!不幸的是,它仍然使用 NGINX 配置根目录而不是我的应用程序根目录。即使在路径前加上 。 也是如此。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我几个月前遇到过这个问题。 我不建议在同一个服务器上使用调试和发布项目。例如,你启动一个 Nginx 应用程序同时包括(调试和发布)键可能导致意外行为。 但是,你可以设置:
package.path = './mylib/?.lua;' .. package.path。local DEBUG = false状态并在应用内进行管理。my.release.lua或my.debug.lua文件: