Hello!
2013/10/3 <bj...@gmail.com>:
> 需求是:我需要验证域名的合法性,验证代码已经测试通过,
> 现在不知道怎么实现代码的复用,比如我的location 每次都得验证,而且每个location都需要返回值
> 代码如下------------------主要问题是 ngx.exec 能不能返回参数,不能的话 怎么进行变量的传递。
>
你不应该使用 ngx.exec() 因为内部跳转是有去无回的,所以你不可能返回值到原来的请求对应的 location,因为原先的
location 已经被覆盖掉了。
你可以把你的 access_by_lua 指令放在一个独立的外部文件中,比如叫做 conf/access.conf,然后在需要用到的
location 里面直接写一行
include conf/access.conf;
就完事了。这是通过 nginx 子配置文件来实现复用。
另外一种更高效一点的做法是把你的 Lua 主逻辑代码写到一个 Lua 模块文件中,比如 conf/access.lua 文件:
local _M = {}
function _M.check()
-- put your main Lua logic here
end
return _M
然后在你的 access_by_lua 指令里面直接调用此模块:
access_by_lua 'require("access").check()';
也很简单。同时记得正确配置 lua_package_path 指令,以便 Lua 能找到你的这个 access.lua 模块:
lua_package_path "$prefix/conf/?.lua;;";
当然,你也可以同时使用上面两种复用代码的方法,把这一行 access_by_lua 指令也放进单独的 .conf 文件中。
祝玩得开心 :)
Regards,
-agentzh