V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
kaf
V2EX  ›  NGINX

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

  •  
  •   kaf · 87 天前 · 1261 次点击
    这是一个创建于 87 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    还要注意 content-length 的值,因为修改 body 后,长度可能会变化。具体是使用 header_filter_by_lua_block 指令。文档里也有讲
    kaf
        6
    kaf  
    OP
       87 天前
    @ho121 感谢,我去试一下
    igeeky
        7
    igeeky  
       86 天前
    https://github.com/iGeeky/wolf/blob/master/agent/lua/body_filter.lua
    @kaf 参考这个代码吧, 也是鉴权后, 在页面添加鉴权信息的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2749 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:04 · PVG 20:04 · LAX 04:04 · JFK 07:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.