[alibaba/tengine]body_filter阶段有可能修改响应头吗

2024-07-10 355 views
9

目前有个这样的应用场景,连接进来后过tengine交给后端upstream处理,upstream传回的响应要过一遍内容,发现关键字后阻断传回HTTP错误代码. 我用lua去完成这个事情但是lua在upstream之后只有两个接入口,header_filter_by_lua*和body_filter_by_lua. header_filter阶段能改头但是看不到响应不知道该不该改,body_filter阶段能看到body但是改头提示头已经发出去了.

是不是我选用的方式出了问题

回答

9

如果你需要检查响应内容再决定响应头的内容,你可以发起一个子请求先去拿到完整的响应,再回到主请求上来构造新的响应头和响应内容。

header_filter_by_lua、body_filter_by_lua其实就是hook NGINX ngx_http_top_header_filter、ngx_http_top_body_filter来实现的,所以lua和C的方案对你的需求来说其实是一样的,你可以参考子请求的方案。

6

@hongxiaolong 谢谢,问题解决了。