使用 NGINX 将 body 替换为 proxy_pass

Use NGINX to replace body from proxy_pass

我是 openresty/nginx 的新手,我正在尝试用这样的代码替换之前调用 proxy_pass 的 body:

body_filter_by_lua_block {
  ngx.arg[1] = '{"count"' .. ":2}'
  ngx.arg[2] = true
}

我本来没有 ngx.arg[2] = true 的行,但我会取回 body 两次(这是否意味着我要替换的 body 有 2 个块? ).我在 ngx.arg[2] = true 行中添加,现在请求的输出看起来不错。当我部署 nginx 文件时,该服务对于一些请求看起来不错,然后 nginx 请求开始挂起。 correct/best 是替换响应 body 的做法吗?我应该怎么做?

body_filter_by_lua_block内:

ngx.arg[1] 是响应正文的当前块。

ngx.arg[2] 是 end-of-file 标志。当 ngx.arg[1]nil 时,我经常看到在单独的 body_filter_by_lua_block 调用中设置此标志。

这就是为什么你两次看到你的字符串。

上面的 EOF 标志具有 read/write 访问权限,因此如果将其设置为 true,则意味着丢弃任何剩余的块数据。

更改正文内容对我来说效果很好,甚至进行了一些性能测试,使用它时从未遇到过挂起。

PS: 换body的时候别忘了加上header_filter_by_lua_block { ngx.header.content_length = nil }

压缩内容也可能有一些技巧。