为什么在nginx上启用缓存,会缓存dofile()变量和局部变量

时间:2015-06-18 02:51:20

标签: variables caching nginx lua local

我得到了一个像这样的nginx.conf:

local /api/{
    # lua_code_cache off;
    default_type application/json;
    content_by_lua_file webapi.lua;
    }

在webapi.lua中,我得到了这样的代码:

require("LuaXml")
local xml = xml

function foo1(args)
     dofile(file1)
     local var = var
     xml.load(file1)
end

function foo2(args)
     dofile(file2)
     local var = var
     xml.load(file2)
end

输出是:

我第一次请求foo1时,一切都是文件,本地var在file1中获取值,xml工作文件。 第二次我请求foo2时,本地var被赋值给file1中的值而不是file2中的值,xml是nil值,日志中写着“尝试” 索引零值“。

有人可以教我吗??

1 个答案:

答案 0 :(得分:0)

这不是ngx_lua缓存你的dofile调用,但你自己加载的Lua代码(也可能包括你正在使用的第三方Lua模块)通过创建新的Lua来污染Lua全局命名空间全局变量(如全局“xml”变量)。有关详细信息,请参阅以下文档:

https://github.com/openresty/lua-nginx-module#lua-variable-scope