我是openresty/nginx
的新手,我正在尝试使用以下代码替换先前调用proxy_pass的主体:
body_filter_by_lua_block {
ngx.arg[1] = '{"count"' .. ":2}'
ngx.arg[2] = true
}
我原本没有ngx.arg[2] = true
的线,但我会回到身体两次(这是否意味着我替换的身体有两个块?)。我添加了ngx.arg[2] = true
行,现在请求的输出看起来很好。当我部署nginx
文件时,该服务看起来很适合一些请求,然后nginx
请求开始挂起。更换响应体是否是正确/最佳实践?我该怎么做呢?
答案 0 :(得分:1)
body_filter_by_lua_block
内:
ngx.arg[1]
是响应主体的当前组块。
ngx.arg[2]
是文件结束标志。当body_filter_by_lua_block
为ngx.arg[1]
时,我经常会在单独的nil
调用中看到此标记设置。
这就是为什么你看到你的字符串两次。
上面的EOF标志具有读/写访问权限,因此如果将其设置为true
,则意味着只丢弃任何剩余的块数据。
更改正文内容对我来说很好,即使进行了一些性能测试,也不会在使用它时看到挂起。
PS:如果你换了身体,别忘了加header_filter_by_lua_block { ngx.header.content_length = nil }
。
也可能有一些压缩内容的技巧。