如何在openresty的body_filter_by_lua*中修改Content-length

我正在使用openresty作为代理服务器,它可能会改变上游的响应。指令header_filter_by_lua在body_filter_by_lua之前执行。但是我在body_filter_by_lua*中修改了Content-length,而此时标头已被发送。

那么,在body_filter_by_lua*中更改响应后如何设置正确的Content-length?

谢谢!

点赞
用户2060502
用户2060502

当 Lua 代码可能改变响应体长度时,需要在头过滤器中始终清除 Content-Length 响应头(如果有的话),以强制进行流式输出,如下所示:

 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(未经测试)。

2017-07-28 12:27:54