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

2020-08-16 00:43:50 +08:00
 daimaosix

遇到一个关于视频业务很蛋疼的问题,业务需要调整接口地址,分为地址 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 友。

2238 次点击
所在节点    NGINX
18 条回复
also24
2020-08-16 00:50:28 +08:00
是否支持重定向,要在客户端上测试一下做确认(大部分情况下都可以)。

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


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


另外,既然是视频业务,不清楚你们 a_com b_com 上具体放的是什么?
假如是 HLS 流的话,那么 a_com 先返回的是 m3u8 文件?
假如是这种情况,可以考虑篡改相应的文件,将文件內 ts 的地址都修改到 b_com,这样也是可以的。
daimaosix
2020-08-16 01:00:11 +08:00
@also24
@Tianao
做不了哥,因为 a.com 要用 https,直接 CNAME 不能这样做吧? b.com 上做不了 a.com 的 https 配置
daimaosix
2020-08-16 01:01:37 +08:00
@also24 刚才确实是想到了,m3u8 的文件可以走 a 。com,ts 走 b 。com,因为文件量实在太大了,不知道能不能去实现修改,多谢老哥的建议。
vanillaxxx
2020-08-16 01:05:09 +08:00
@daimaosix b.com 用 http 然后 a.com CNAME 到 b.com 不知道了行不?
daimaosix
2020-08-16 01:06:48 +08:00
@parorisim 不行老哥,a,com 必须用 https,b,com 用啥无所谓,主要是 a,com
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
2020-08-16 01:08:35 +08:00
一楼说的重定向我们之前用 307 做过,完全没问题,这个应该是最简便快捷的了吧
daimaosix
2020-08-16 01:19:53 +08:00
@parorisim
@also24
@Tianao
哭了,307 太好用了!!!谢谢各位大佬
vanillaxxx
2020-08-16 01:21:57 +08:00
@daimaosix #10 恭喜恭喜恭喜你呀哈哈哈
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
2020-08-16 01:24:19 +08:00
@daimaosix #10
hhh 307 能用就最好,有些客户端对 307 的支持不是很好。
daimaosix
2020-08-16 01:28:27 +08:00
@also24 我们主要是 APP,既然播放器 OK 的话,那其他问题应该就不大吧?
daimaosix
2020-08-16 01:31:14 +08:00
@also24 刚才试了一下,H5 的播放器不支持,不过我们也没有网页,基本都是通过 APP 用的,测试了一下 APP 没发现什么异常。
also24
2020-08-16 01:36:52 +08:00
@daimaosix #14
比较新一点的客户端应该都还不错,大部分情况下应该不用操心。
没找到请求库相关的,只找到一份浏览器的:
http://test.greenbytes.de/tech/tc/httpredirects/


如果很担心的话,可以在重定向的时候加一点标记,然后两边统计一下请求数量。
also24
2020-08-16 01:59:05 +08:00
这里举一个不支持 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
2020-08-16 02:00:54 +08:00
修正一下措辞,okhttp 不是不支持 307,是对 307 的支持不标准。

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

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

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

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

© 2021 V2EX