openresty 怎么修改代理站的文件返回给客户端

36 天前
 kaf

源站有很多静态资源下载,openresty 作为网关加了鉴权,希望能解析特定的文本文件,把鉴权参数追加到文本文件的每一行,花了半天时间没搜索到什么资料。今天有看到可以直接通过 lua 脚本直接请求源站获取 body 之后修改后返回,openresty 主题人太少了,来这边希望有大佬指导下

1005 次点击
所在节点    NGINX
7 条回复
ho121
36 天前
zhangjiashu2023
36 天前
对具体 location 进行拦截,然后用 body_filter_by_lua_file 指定 lua 文件,可以对响应进行拦截,修改响应数据。但是要注意请求的时候不要开压缩,或者代理的时候加上 proxy_set_header Accept-Encoding identity; 不然你拦截到的响应体是压缩后的数据。gzip 解压比较方便,其他的 br 啥的 openresty 整了很久配置都没弄明白。所以干脆不让压缩了
kaf
36 天前
@ho121 在 body_filter_by_lua 块下会有 ngx.arg[1]和 ngx.arg[2]两个变量,ngx.arg[1]为响应正文,ngx.arg[2]表示流是否结束,是这样子吗
kaf
36 天前
@zhangjiashu2023 有约定不启用压缩,参考了下一楼的文章,就是在 body_filter_by_lua_file 脚本中处理 ngx.arg[1]变量吧
ho121
36 天前
@kaf 是这样

还要注意 content-length 的值,因为修改 body 后,长度可能会变化。具体是使用 header_filter_by_lua_block 指令。文档里也有讲
kaf
36 天前
@ho121 感谢,我去试一下
igeeky
36 天前
https://github.com/iGeeky/wolf/blob/master/agent/lua/body_filter.lua
@kaf 参考这个代码吧, 也是鉴权后, 在页面添加鉴权信息的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1064581

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX