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

时间:2017-07-27 16:54:16

标签: nginx openresty

我使用openresty作为代理服务器,这可能会改变来自上游的响应。指令header_filter_by_lua *在body_filter_by_lua *之前执行。但是我在body_filter_by_lua *中更改了Content-length,并且当时已发送了标题。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

当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(没有测试)