如何在 openresty 中更改 body_filter_by_lua* 中的内容长度

How to change Content-length in body_filter_by_lua* in openresty

我正在使用 openresty 作为代理服务器,这可能会改变来自上游的响应。指令 header_filter_by_lua* 在 body_filter_by_lua* 之前执行。但是我在body_filter_by_lua*里面改了Content-length,那个时候headers已经发完了。

那么在 body_filter_by_lua* 中更改来自上游的响应时如何设置正确的 Content-length?

谢谢!

来自https://github.com/openresty/lua-nginx-module#body_filter_by_lua

当Lua代码可能会改变响应body的长度时,则需要始终清除Content-Length响应header(如果有的话)在 header 过滤器中强制执行流式输出,如

 location /foo {
     # fastcgi_pass/proxy_pass/...

     header_filter_by_lua_block { ngx.header.content_length = nil }
     body_filter_by_lua 'ngx.arg[1] = string.len(ngx.arg[1]) .. "\n"';
 }

我预计 nginx 在这种情况下会使用 http://greenbytes.de/tech/webdav/rfc2616.html#chunked.transfer.encoding(未测试)