如何在Nginx的set_by_lua_file指令中传参并在Lua脚本中读取
问题解答
你给出的nginx.conf配置是可行的,完全符合ngx_lua模块的set_by_lua_file指令的参数传递规则。
参数获取方法
你之前尝试的几种方式都不适用当前运行环境:
$0/$1属于Nginx原生变量语法,无法直接在Lua脚本内使用- 普通Lua脚本的
arg表是命令行执行场景下的全局参数表,在ngx_lua的Nginx运行上下文中不存在
你需要使用ngx_lua模块提供的ngx.arg全局表读取传入的参数,参数按照你在配置中填写的顺序从索引1开始存储。你当前配置只传入了"user:"一个参数,直接在some_file.lua中读取ngx.arg[1]即可拿到该值。
完整示例
some_file.lua参考代码如下:
-- 读取配置传入的前缀参数 local prefix = ngx.arg[1] -- 此处可编写你的业务逻辑生成对应实例地址 local res_address = prefix .. "10.0.0.5:9001" -- 最终return的值会自动赋值给Nginx中的$instance_address变量 return res_address
如果你需要传递多个参数,直接在配置里按空格分隔追加即可,示例配置如下:set_by_lua_file $instance_address conf/some_file.lua "user:" "prod" "2024"
之后在Lua脚本中分别用ngx.arg[1]、ngx.arg[2]、ngx.arg[3]就能依次拿到对应参数。
内容的提问来源于stack exchange,提问作者juleslasne
相关产品推荐
相关产品推荐

