使用NGINX从proxy_pass替换body

时间:2018-04-09 17:35:35

标签: nginx openresty lua-ngx-module

我是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请求开始挂起。更换响应体是否是正确/最佳实践?我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

body_filter_by_lua_block内:

ngx.arg[1]是响应主体的当前组块。

ngx.arg[2]是文件结束标志。当body_filter_by_lua_blockngx.arg[1]时,我经常会在单独的nil调用中看到此标记设置。

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

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

更改正文内容对我来说很好,即使进行了一些性能测试,也不会在使用它时看到挂起。

PS:如果你换了身体,别忘了加header_filter_by_lua_block { ngx.header.content_length = nil }

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