Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用直接服务器返回转发HTTP请求_Http_Reverse Proxy_Forwarding - Fatal编程技术网

使用直接服务器返回转发HTTP请求

使用直接服务器返回转发HTTP请求,http,reverse-proxy,forwarding,Http,Reverse Proxy,Forwarding,我的服务器分布在几个数据中心,每个中心存储不同的文件。我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器直接将文件返回给用户 下面是一个简单的例子: 1) 用户的浏览器请求 2) 请求根据DNS A记录(例如.com)发送到服务器A。 3) 服务器A分析请求并确定/files/file1.zip存储在服务器B上。 4) 服务器A将请求转发给服务器B。 5) 服务器B直接将file1.zip返回给用户,而无需经过服务器A 注意:步骤4和5必须对用户透明,并且不能涉及向用户发送重定向,因

我的服务器分布在几个数据中心,每个中心存储不同的文件。我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器直接将文件返回给用户

下面是一个简单的例子:
1) 用户的浏览器请求
2) 请求根据DNS A记录(例如.com)发送到服务器A。
3) 服务器A分析请求并确定/files/file1.zip存储在服务器B上。
4) 服务器A将请求转发给服务器B。
5) 服务器B直接将file1.zip返回给用户,而无需经过服务器A

注意:步骤4和5必须对用户透明,并且不能涉及向用户发送重定向,因为这将违反单个域的要求

根据我的研究,我想要实现的是“直接服务器返回”,这是一种常见的负载平衡设置。它有时也称为半反向代理

对于步骤4,听起来我需要进行MAC地址转换,然后将请求传递回网络,对于服务器网络之外的服务器,将需要隧道

对于步骤5,我只需要按照负载平衡设置中的实际服务器配置服务器B。也就是说,服务器B应该在环回接口上有服务器A的IP地址,并且它不应该回答对该IP地址的任何ARP请求

我的问题是如何真正实现步骤4

我发现有很多硬件和软件可以在第4层实现简单的负载平衡,但这些解决方案存在不足,无法处理我需要的自定义路由。看来我需要推出自己的解决方案


理想情况下,我希望在web服务器级别执行路由/转发,即使用PHP或C#/ASP.net。但是,我愿意在较低的级别(如Apache或IIS)或甚至更低的级别(即所有内容前面的自定义代理服务)执行此操作。

为什么不发送状态代码为307的HTTP响应临时重定向

此时,客户端将重新请求正确的指定服务器

我知道你想要一个域,但是你可以有两个单独的子域加上一个公共域

例如:

example.com
具有IP1、IP2和IP3

example1.example.com
具有IP1
example2.example.com
具有IP2
example3.example.com
具有IP3


如果请求到达无法自行处理的服务器,它将转发用户以向正确的特定服务器发出另一个请求。HTTP浏览器将透明地遵循此重定向。

请原谅我的无知,但为什么不设置服务器A以通过NFS或SMB装载位于其他服务器上的文件,具体取决于您是使用unix变体,还是使用Windows

看起来你要做的事情过于复杂,可能非常简单。此外,使用网络挂载文件将允许您在将来需要时在其他计算机上挂载这些文件。此时,您可以在服务器a(以及服务器x、y和z,它们也都从服务器B装载文件)前面放置负载平衡器

假定这不能解决在返回时绕过服务器A的问题,从技术上讲,服务器A将返回文件,而不是服务器B,但如果将负载平衡器放在A前面,那么A无论如何将变成B,因此从技术上讲,B仍将返回文件,因为负载平衡器将使用直接服务器返回(这是很长一段时间以来的标准功能)

如果我确实错过了什么,请详细说明


编辑:是的,我知道这是近3年前发布的。哦,好吧。

这需要更改域。位置标题需要指定www.example.com以外的内容,例如www2.example.com,否则请求将直接返回到同一服务器。如果您想知道我为什么不能更改域,这是因为提供的文件是flash swf文件,大多数使用本地存储,这要求域/子域保持不变。仅供参考,我已经尝试了所有30x重定向,没有一个对flash透明。