Nginx Openresty-读取响应正文后更改http状态
我有一个openresty nginx来代理elasticsearch。因此,grafana客户端联系nginx,nginx从elasticsearch获取响应。目标是,如果elasticsearch的响应主体包含键“timedout”:true,则将http状态更改为504 使用body\u by\u filter\u lua\u块读取响应正文,但此指令不支持更改http状态Nginx Openresty-读取响应正文后更改http状态,nginx,proxy,openresty,Nginx,Proxy,Openresty,我有一个openresty nginx来代理elasticsearch。因此,grafana客户端联系nginx,nginx从elasticsearch获取响应。目标是,如果elasticsearch的响应主体包含键“timedout”:true,则将http状态更改为504 使用body\u by\u filter\u lua\u块读取响应正文,但此指令不支持更改http状态 http { lua_need_request_body on; server { listen 8000;
http {
lua_need_request_body on;
server {
listen 8000;
location / {
proxy_pass "http://localhost:9200"
header_filter_by_lua_block {
ngx.header.content_length = nil
}
body_filter_by_lua_block {
if string.find(ngx.arg[1], "\"timedout\":true") then
ngx.arg[1] = nil
}
}
}
}
上面的代码只是使响应主体为nil。但是有没有办法改变http状态呢?或者,如果nginx不支持它,是否有其他代理服务器可以执行此任务
任何帮助都将不胜感激。您不能通过\u lua\u块更改
正文\u过滤器\u中的状态,因为此时所有响应标头都已发送到下游
如果您确实需要,请不要使用proxy\u pass
相反,使用content\u by\u lua\u block
并在其中发出请求,阅读全文,分析内容,并使用所需的任何状态代码进行响应
这种方法是完全缓冲的,对于大型响应可能具有显著的性能影响
你也应该记住,身体可能会被压缩