遇到一个关于视频业务很蛋疼的反向代理问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daimaosix
V2EX    NGINX

遇到一个关于视频业务很蛋疼的反向代理问题

  •  
  •   daimaosix 2020-08-16 00:43:50 +08:00 2547 次点击
    这是一个创建于 1959 天前的主题,其中的信息可能已经有所发展或是发生改变。

    遇到一个关于视频业务很蛋疼的问题,业务需要调整接口地址,分为地址 a 和地址 b

    地址 a 为:a.com

    地址 b 为:b.com

    现在 b.com 没办法直接用,因为后端把地址 a.com 写死了卧槽!!!现在想的办法是通过 a.com 反向代理到 b.com ,但是 b.com 的服务器带宽比较充足,a.com 带宽就比较小。

    如果通过 a.com 反向代理到 b.com ,那是不是就会受限于 a.com 的服务器带宽呢?

    如果受限于 a.com 的带宽,不通过 a.com 反向代理,那么是不是可以用重定向的方式呢?

    或者还有其他更友好的方式实现呢?谢谢各位 V 友。

    第 1 条附言    2020-08-16 01:20:42 +08:00
    已解决。谢谢各位大佬的帮助。通过 Nginx 配置 307 跳转即可完美快速的解决。
    18 条回复    2020-08-16 02:00:54 +08:00
    also24
        1
    also24  
       2020-08-16 00:50:28 +08:00
    是否支持重定向,要在客户端上测试一下做确认(大部分情况下都可以)。

    要注意使用 301 302 可能会导致 POST 请求变为 GET 请求,如果这里存在问题,可以测试一下 307 是否正常。


    另:不能直接将 a.com 指到 b.com 去嘛?
    Tianao
        2
    Tianao  
       2020-08-16 00:52:41 +08:00 via iPhone   1
    直接把 a.com 解析到 b.comb.com 的服务器监听对 a.com 的请求。
    also24
        3
    also24  
       2020-08-16 00:54:03 +08:00   1
    少回答了一个问题,如果直接反代,那流量确实会受限于 a_com 的带宽。


    另外,既然是视频业务,不清楚你们 a_com b_com 上具体放的是什么?
    假如是 HLS 流的话,那么 a_com 先返回的是 m3u8 文件?
    假如是这种情况,可以考虑篡改相应的文件,将文件 ts 的地址都修改到 b_com,这样也是可以的。
    daimaosix
        4
    daimaosix  
    OP
       2020-08-16 01:00:11 +08:00
    @also24
    @Tianao
    做不了哥,因为 a.com 要用 https,直接 CNAME 不能这样做吧? b.com 上做不了 a.com 的 https 配置
    daimaosix
        5
    daimaosix  
    OP
       2020-08-16 01:01:37 +08:00
    @also24 刚才确实是想到了,m3u8 的文件可以走 a 。com,ts 走 b 。com,因为文件量实在太大了,不知道能不能去实现修改,多谢老哥的建议。
    vanillaxxx
        6
    vanillaxxx  
       2020-08-16 01:05:09 +08:00 via iPhone
    @daimaosix b.com 用 http 然后 a.com CNAME 到 b.com 不知道了行不?
    daimaosix
        7
    daimaosix  
    OP
       2020-08-16 01:06:48 +08:00
    @parorisim 不行老哥,a,com 必须用 https,b,com 用啥无所谓,主要是 a,com
    also24
        8
    also24  
       2020-08-16 01:08:02 +08:00
    @daimaosix #4
    我们先来说直接 https 的方案,其实并不需要 b_com 上有 a_com 的证书。

    你可以在 b_com 上配置 SNI 反代,具体可以参考这个模块的使用:
    http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html

    这样实现之后的效果的:
    只要 b_com 发现流量是要访问 a_com 的,就直接转发到 a_com (没有解密过程)。
    如果 b_com 和 a_com 在同一个内网,这样操作还是有一点点意义的。
    vanillaxxx
        9
    vanillaxxx  
       2020-08-16 01:08:35 +08:00 via iPhone   1
    一楼说的重定向我们之前用 307 做过,完全没问题,这个应该是最简便快捷的了吧
    daimaosix
        10
    daimaosix  
    OP
       2020-08-16 01:19:53 +08:00
    @parorisim
    @also24
    @Tianao
    哭了,307 太好用了!!!谢谢各位大佬
    vanillaxxx
        11
    vanillaxxx  
       2020-08-16 01:21:57 +08:00   1
    @daimaosix #10 恭喜恭喜恭喜你呀哈哈哈
    also24
        12
    also24  
       2020-08-16 01:23:43 +08:00
    @daimaosix #5
    然后我们说 m3u8 文件修改的方案。

    首先,最简单的方法肯定是直接改文件本身,可以写个小程序去批量修改。

    其次,就是直接使用 nginx 的 ngx_http_substitutions_filter_module 模块动态修改。
    https://www.nginx.com/resources/wiki/modules/substitutions/
    https://github.com/yaoweibin/ngx_http_substitutions_filter_module

    这个模块的功能也很简单,就是查找替换,比起官方的 ngx_http_sub_module 多支持了正则。
    需要注意的是,这是个第三方模块,且近期似乎没有太多维护,要做好测试。


    不知道你们的请求分布情况是怎么样的,按道理来说,对于大量请求的文件,还是尽量直接修改掉会比较好。
    also24
        13
    also24  
       2020-08-16 01:24:19 +08:00
    @daimaosix #10
    hhh 307 能用就最好,有些客户端对 307 的支持不是很好。
    daimaosix
        14
    daimaosix  
    OP
       2020-08-16 01:28:27 +08:00
    @also24 我们主要是 APP,既然播放器 OK 的话,那其他问题应该就不大吧?
    daimaosix
        15
    daimaosix  
    OP
       2020-08-16 01:31:14 +08:00
    @also24 刚才试了一下,H5 的播放器不支持,不过我们也没有网页,基本都是通过 APP 用的,测试了一下 APP 没发现什么异常。
    also24
        16
    also24  
       2020-08-16 01:36:52 +08:00   1
    @daimaosix #14
    比较新一点的客户端应该都还不错,大部分情况下应该不用操心。
    没找到请求库相关的,只找到一份浏览器的:
    http://test.greenbytes.de/tech/tc/httpredirects/


    如果很担心的话,可以在重定向的时候加一点标记,然后两边统计一下请求数量。
    also24
        17
    also24  
       2020-08-16 01:59:05 +08:00   1
    这里举一个不支持 307 的例子:
    https://github.com/square/okhttp/blob/master/CHANGELOG.md#version-460

    相应的代码在这里:
    https://github.com/square/okhttp/pull/5990

    这个的问题,在 2014 年就被引入,2016 年就被提出,却直到今年才被修正:
    https://github.com/square/okhttp/pull/944#issuecomment-248449263


    这个库,就是大名鼎鼎的 okhttp,做 Android 开发的应该基本都用过它 ~
    also24
        18
    also24  
       2020-08-16 02:00:54 +08:00   1
    修正一下措辞,okhttp 不是不支持 307,是对 307 的支持不标准。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2630 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:11 PVG 18:11 LAX 02:11 JFK 05:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86