如何在nginx中使用lua设置结构体中的变量

我需要使用 Lua 在 (nginx 内部 C 结构体) ngx_http_request_s 中设置一个变量。

这个变量将对于每个请求具有唯一的值。

这可以实现吗?该字段是否需要公开为变量或是否有其他方法可以实现?

点赞
用户1009249
用户1009249

第一种方法是在lua中公开一个要修改的变量。然后该变量的回调 (ngx_http_variable_s::set_handler) 可以改变nginx内部的C结构。

第二种方法是创建Lua C绑定。lua-nginx-module导出了一些C API,用于将C绑定到lua中。以下是来自dyups模块的示例: binding C to ngx.luacalling C from ngx.lua。请注意,您可以通过C函数中的ngx_http_lua_get_req(L)获取ngx_http_request_t *指针。

我更喜欢的第三种方法是通过FFI模块直接在ngx.lua中调用C函数。 但它无法在您的情况下使用,没有很好的方法来获取当前lua_State *指针或ngx_http_request_t *指针在FFI-called C函数中。

2016-03-30 16:46:08