Nginx Lua修改返回值

发布时间 2023-10-20 21:32:14作者: 王景迁

调试lua脚本
ngx.log(ngx.ERR, "xxx")
日志会打印到/usr/local/nginx/logs/error.log

修改返回值时避免内容被截断

增加header_filter_by_lua 'ngx.header.content_length = nil';
注释后只返回原接口长度3,即ok\n。

lua脚本默认必须放在/usr/local/nginx目录下,否则会找不到。

modify_response脚本被触发3次。被调用多次的原因是,上游响应数据可能以HTTP 1.1 chunked方式传输。字符串类型值ngx.arg[1]表示上游响应数据,布尔类型值ngx.arg[2]表示是否已到达响应数据流的结尾。

gdb调试
b src/http/modules/ngx_http_chunked_filter_module.c:74
c
通过curl来发起请求
nginx.conf中加上header_filter_by_lua 'ngx.header.content_length = nil';

nginx.conf中不加header_filter_by_lua 'ngx.header.content_length = nil';
这里的3对应了后端服务返回值ok\n的长度

参考资料

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