Hello!
2013/5/22 xunen:
> hi,项目中用到了 nginx 的 lua 模块,有两个疑问想求教下:
> (1)、项目中需要开发一个模块,用 lua 模块作为黏合层。
>
> 配置是这样的:
>
> location / {
> rewrite_by_lua_file 'rewrite.lua'
> mymod;
> }
>
> mymod 是项目中开发的 handler 模块,rewrite 用于处理一些配置和一些逻辑。
>
> 最终 lua 计算的结果通过 ngx.ctx 机制存放。
>
> 我想请教下,mymod 模块是否可以通过如下方式(略去异常处理) 获取 lua ctx 的配置?
>
> lua_pushlightuserdata(L, &ngx_http_lua_request_key);
> lua_rawget(L, LUA_GLOBALSINDEX);
> ngx_http_request_t *r = lua_touserdata(L, -1);
> lua_pop(L, 1);
>
> ctx = ngx_http_get_module_ctx(r, ngx_http_lua_module);
>
> ...
>
不可以。建议使用 Nginx 变量来在不对的 Nginx 模块之间交换数据。或者你可以在你自己的 nginx C 模块中使用 ngx_lua
模块的 ngx_http_lua_api.h 头文件里暴露出来的公共 C API(但此时,你也不能访问 ngx.ctx 数据,因为
ngx.ctx 的生命期的问题)。
> (2)、lua 编译静态链接 luajit 库
> 项目中 nginx 集成 lua 模块,想静态链接 luajit 库,部署时想减少包的依赖。
> 歪打正着,发现修改 config 文件可以实现:
>
> --- lua-nginx-module-0.8.1/config 2013-04-27 03:27:52.000000000 +0800
> +++ lua-nginx-module-0.8.1-patched/config 2013-05-21 10:50:01.000000000
> +0800
> @@ -13,7 +13,7 @@
> if [ $NGX_RPATH = YES ]; then
> ngx_feature_libs="-R$LUAJIT_LIB -L$LUAJIT_LIB -lluajit-5.1 -lm"
> else
> - ngx_feature_libs="-L$LUAJIT_LIB -lluajit-5.1 -lm"
> + ngx_feature_libs="-L$LUAJIT_LIB -lluajit-5.1 -lm -ldl"
> fi
>
> . auto/feature
> @@ -49,7 +49,7 @@
> if [ $NGX_RPATH = YES ]; then
> ngx_feature_libs="-R$LUA_LIB -L$LUA_LIB -llua -lm"
> else
> - ngx_feature_libs="-L$LUA_LIB -llua -lm"
> + ngx_feature_libs="-L$LUA_LIB -llua -lm -ldl"
> fi
>
> . auto/feature
> 不知道这种方式是否有问题,还是有别的好的方法?
>
应当是可以的,见 http://luajit.org/install.html#embed
同时抄送给 openresty 中文邮件列表:https://groups.google.com/group/openresty
建议你加入此列表并总是在那里交流这样的问题。谢谢合作!
Best regards,
-agentzh