使用 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 }
压缩内容也可能有一些技巧。
我是 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 }
压缩内容也可能有一些技巧。