V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
kaf
V2EX  ›  NGINX

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

  •  
  •   kaf · Aug 13, 2024 · 2432 views
    This topic created in 627 days ago, the information mentioned may be changed or developed.

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

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

    还要注意 content-length 的值,因为修改 body 后,长度可能会变化。具体是使用 header_filter_by_lua_block 指令。文档里也有讲
    kaf
        6
    kaf  
    OP
       Aug 13, 2024
    @ho121 感谢,我去试一下
    igeeky
        7
    igeeky  
       Aug 13, 2024   ❤️ 1
    https://github.com/iGeeky/wolf/blob/master/agent/lua/body_filter.lua
    @kaf 参考这个代码吧, 也是鉴权后, 在页面添加鉴权信息的.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   866 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 23:03 · PVG 07:03 · LAX 16:03 · JFK 19:03
    ♥ Do have faith in what you're doing.