关于下载服务器流量均衡的问题?


请问以下需求如何解决呢?

有三台nginx服务器

其中一台X用作为web服务器

另外两台作为附件服务器分别为A和B,各自保存不同的附件文件
A、B分别绑定域名为:
download-a.xxx.com
download-b.xxx.com

假如用户访问网站后需要下载一个文件123.zip,
下载链接为 http://bbs.xxx.com/123.zip (注意不是真实下载地址)

但不知道这个123.zip文件放在A、B哪个服务器上,
真实的下载地址可能是download-a.xxx.com/123.zip,可能是download-b.xxx.com/123.zip
可能都没有这个文件

需求与目的:由于A、B出口带宽有限,故将文件分别放到不同的机器上,同时有效利用A、B的带宽和存储空间(若A、B上的文件一样,采用负载均衡方式,又会浪费A、B重复保存文件的磁盘空间),希望能通过判断找到文件在哪儿,并让存储服务器自己直接将文件发送给客户

疑问一:
若我通过网站的php代码判断文件在A、B哪台服务器上,然后页面显示真实地址,客户点击后直接下载,php代码如何写呢?

疑问二:
若以上方法不可行,是否能在A、B前面使用一个nginx服务器C来处理请求,相当于反向代理角色

例如
用户点击页面上资源链接 http://bbs.xxx.com/123.zip 去下载, http://bbs.xxx.com 即为服务器C绑定的域名,C自己不存储资料。
C收到请求后判断资料在A、B谁哪儿,如果在A这里,C直接告诉A在你那儿,并让A将文件直接发给用户,不经过C,以上需求nginx是否可以实现呢?
最主要的是让目标服务器直接把文件返回给用户浏览器,不走C的流量和带宽,可否实现?

服务器 nginx

永恒的幻影 9 years, 5 months ago

可以在文件名中提现存储位置,比如设定第x位表示存储在A/B服务器上。

只需根据文件名判断即可。

hysteriabobo answered 9 years, 5 months ago

Your Answer