我试图在log_by_lua程序块收集访问信息,其中包括了用户POST的数据。 但是ngx.req.read_body()无法在log_by_lua中执行,直接调用ngx.req.get_body_data() 返回nil。
请问如何在log_by_lua中访问到用的的Post data?
谢谢!Leo --
Hello,在 2016年1月23日 上午11:47,Lei Chen <lc...@gmail.com>写道: 我试图在log_by_lua程序块收集访问信息,其中包括了用户POST的数据。 但是ngx.req.read_body()无法在log_by_lua中执行,直接调用ngx.req.get_body_data() 返回nil。get_body_data 也不支持的 log 阶段运行的,见:https://github.com/openresty/lua-nginx-module#ngxreqget_body_data 请问如何在log_by_lua中访问到用的的Post data?可以使用 nginx 标准的内建变量 request_body,在 Lua 里用 ngx.var.request_bodyhttp://nginx.org/en/docs/http/ngx_http_core_module.html 谢谢!Leo -- --
> get_body_data 也不支持的 log 阶段运行的,见:> https://github.com/openresty/lua-nginx-module#ngxreqget_body_data这块我测试了一下,应该是文档疏漏,在 log_by_lua 阶段是 可以调用 ngx.req.get_body_data() ,而且也是合理的。稍候给春哥提交一个 PR 。 ^_^
> 但是ngx.req.read_body()无法在log_by_lua中执行,直接调用ngx.req.get_body_data() 返回nil。请问如何在log_by_lua中访问到用的的Post data?在 log_by_lua 阶段执行 ngx.req.read_body() 肯定是不合适的,因为这时候 nginx 已经根据请求信息返回数据了,当前请求已经处理完毕了。所以如果在 log_by_lua 阶段需要读取 body 数据,就应当在他之前的阶段执行读取操作。在 nginx 的 location 中配置 lua_need_request_body 指令可以适当简化读取操作,供参考。2016-01-23 14:58 GMT+08:00 DeJiang Zhu <douj...@gmail.com>:Hello,在 2016年1月23日 上午11:47,Lei Chen <lc...@gmail.com>写道: 我试图在log_by_lua程序块收集访问信息,其中包括了用户POST的数据。 但是ngx.req.read_body()无法在log_by_lua中执行,直接调用ngx.req.get_body_data() 返回nil。get_body_data 也不支持的 log 阶段运行的,见:https://github.com/openresty/lua-nginx-module#ngxreqget_body_data 请问如何在log_by_lua中访问到用的的Post data?可以使用 nginx 标准的内建变量 request_body,在 Lua 里用 ngx.var.request_bodyhttp://nginx.org/en/docs/http/ngx_http_core_module.html 谢谢!Leo -- -- -- YuanSheng Wang---------------------------------------My Github: https://github.com/membphisOpenResty lover ^_^ --