我的服务器分布在多个数据中心,每个数据中心都存储不同的文件。我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器将文件直接返回给用户。
下面是一个简单的例子:
1) 用户的浏览器请求http://www.example.com/files/file1.zip
2) 请求到达服务器 A,基于 example.com 的 DNS A 记录。
3) 服务器 A 分析请求,发现 /files/file1.zip 存储在服务器 B 上。
4) 服务器 A 将请求转发给服务器 B。
5) 服务器 B 直接返回 file1.zip 给用户,无需经过服务器一个。
注意:步骤 4 和 5 必须对用户透明,并且不能涉及向用户发送重定向,因为这会违反单个域的要求。
根据我的研究,我想要实现的称为“直接服务器返回”,它是负载平衡的常见设置。它有时也称为半反向代理。
对于第 4 步,听起来我需要进行 MAC 地址转换,然后将请求传递回网络,对于服务器网络之外的服务器,将需要隧道。
对于第 5 步,我只需要根据负载平衡设置中的真实服务器配置服务器 B。也就是说,服务器 B 应该在环回接口上拥有服务器 A 的 IP 地址,并且它不应该响应对该 IP 地址的任何 ARP 请求。
我的问题是如何实际实现第 4 步?
我发现有很多硬件和软件可以在第 4 层实现简单的负载平衡,但这些解决方案不够完善,无法处理我需要的那种自定义路由。看来我需要推出自己的解决方案。
理想情况下,我想在 Web 服务器级别进行路由/转发,即在 PHP 或 C#/ASP.net 中。但是,我愿意在 Apache 或 IIS 等较低级别,或者在更低级别(即所有事物前面的自定义代理服务)上执行此操作。