Ngx_Lua_API指令和Nginx的指令一样,都存在配置环境的约束问题,需要确保指令的环境符合预期。
常用环境如下:
rewrite_by_lua_block
access_by_lua_block
content_by_lua_block
log_by_lua_block
1、控制请求头的指令
操作 | 指令 | 用法 |
添加请求头 | ngx.req.set_header | ngx.req.set_header("Test", "123") |
清除请求头 | ngx.req.clear_header | ngx.req.clear_header("Test") |
获取请求头 | ngx.req.get_headers | local h = ngx.req.get_headers() for k, v in pairs(h) do ngx.say('name:', k, 'value:', v) end |
2、控制响应头的指令
操作 | 指令 | 用法 |
获取响应头 | ngx.resp.get_headers | local h = ngx.resp.get_headers() for k, v in pairs(h) do ngx.say('name:', k, 'value:', v) end |
修改响应头 | ngx.header.HEADER | ngx.header.X_Test = 'test' 9注意:若头字段名带"-",则用"_"替代。) |
清除响应头 | ngx.header["Header-Name"] =nil | ngx.header["X-Test"] =nil |
3、读取请求体的指令
操作 | 指令 | 用法 | 说明 |
强制获取请求体 | lua_need_request_body | lua_need_request_body on data = ngx.var.request_body | 不建议使用 |
同步非阻塞方式获取请求体 | 同步读取请求体: ngx.req.read_body | ngx.req.read_body() | |
通过内存方式获取请求体数据: ngx.req.get_body_data | ngx.req.read_body() local data = ngx.req.get_body_data() | 获取请求体前,必须执行ngx.req.read_body()
确保client_body_buffer_size和client_max_body_size的值一致,如果请求体数据的大小超过client_body_buffer_size的值,请求体数据会存储到临时文件。 | |
获取存放请求体的临时文件: ngx.req.get_body_file | ngx.req.read_body() local file = ngx.req.get_body_file() | 获取请求体前,必须执行ngx.req.read_body() |
4、输出响应体的指令
操作 | 指令 | 用法 | 说明 |
异步发送响应体 | ngx.print | ngx.print("test") | |
ngx.say | ngx.say("test") | 与ngx.print相比较,在输出结果中多了一个回车符 | |
同步发送响应体 | ngx.flush | ngx.flush(true) |