【问题标题】:Use NGINX to replace body from proxy_pass使用 NGINX 从 proxy_pass 替换 body
【发布时间】:2018-04-09 17:35:34
【问题描述】:
我是 openresty/nginx 的新手,我正在尝试用以下代码替换之前对 proxy_pass 调用的正文:
body_filter_by_lua_block {
ngx.arg[1] = '{"count"' .. ":2}'
ngx.arg[2] = true
}
我最初没有ngx.arg[2] = true 的行,但我会取回身体两次(这是否意味着我要替换的身体有 2 个块?)。我在ngx.arg[2] = true 行中添加了,现在请求的输出看起来不错。当我部署nginx 文件时,该服务对于一些请求看起来不错,然后nginx 请求开始挂起。更换响应主体是正确/最佳实践吗?我应该怎么做?
【问题讨论】:
标签:
nginx
openresty
lua-ngx-module
【解决方案1】:
body_filter_by_lua_block内:
ngx.arg[1] 是响应正文的当前块。
ngx.arg[2] 是文件结束标志。当ngx.arg[1] 是nil 时,我经常看到在单独的body_filter_by_lua_block 调用中设置了这个标志。
这就是你看到你的字符串两次的原因。
上面的 EOF 标志具有读/写访问权限,因此如果将其设置为 true,则意味着只需丢弃所有剩余的块数据。
更改正文内容对我来说效果很好,甚至进行了一些性能测试,使用它时从来没有看到挂起。
PS:如果您更改正文,请不要忘记包含header_filter_by_lua_block { ngx.header.content_length = nil }。
还有一些压缩内容的技巧。