假设你有一个盒子(专用服务器)在24 7和其他几个盒子是未使用带宽的用户机器。假设您要托管多个网页。专用服务器如何将http流量重定向到用户计算机。希望Web浏览器中的地址字段仍然显示正确的地址,而不是ip。 IE浏览器。我不想重定向到另一个网页,我想告诉网络浏览器它应该从不同的服务器请求相同的网页。我一直在浏览3xx代码,我认为它们不是为这样做的。
它应该在这些方面起作用: 1.专用服务器一直在线。 2.用户计算机启动并告知专用服务器它是否在线。 (其他几个用户机器可以做类似的事情) 3. Web浏览器查找域名并发现它指向专用服务器。 4. Web浏览器请求页面。 5.专用服务器告诉Web浏览器重复向用户计算机的请求
是否可以使用某种重定向,最好告诉浏览器继续向用户机器发送更多请求。用户计算机几乎可以在任何时间点关闭,但假设用户计算机将等待正在进行的事务完成,而不是在get或者其他任何事情中关闭服务器程序。
答案 0 :(得分:3)
您想要的是一个代理服务器或负载均衡器,它将位于您的Web服务器前面。
Web浏览器始终与负载均衡器通信,负载均衡器会将请求转发给多个后端服务器之一。客户端不需要重定向,因为客户端总是认为它只是与负载均衡器通信。
ETA:
看着你的各种评论并重新阅读这个问题,我想我误解了你想做什么。我在想所有提供内容的机器都在同一个网络上,但现在我发现你正在寻找更像p2p web服务器设置的东西。
如果是这种情况,使用DNS和HTTP 30x重定向可能就是您所需要的。它可能看起来像这样:
您的“主”服务器将充当应用程序的入口点,并且具有众所周知的主机名,例如“www.myapp.com”。
每当新的“用户”机器联机时,它将向主服务器注册自己,并且主服务器将为该用户机器创建或更新DNS条目,例如, “user123.myapp.com”。
如果请求来到主服务器的某个给定页面,例如“www.myapp.com/index.htm”,它将基于它为该机器创建的任何DNS条目进行302重定向到其中一个用户机器 - 例如将它们重定向到“user123.myapp.com/index.htm”。
我用这种方法看到的一些问题:
首先,一旦用户被重定向到用户计算机,如果用户计算机脱机,那么应用程序似乎已经死了。您可以通过让每个页面上的所有链接专门指向“www.myapp.com”而不是使用相对链接来避免这种情况,但是每个请求都必须通过“主服务器”进行路由,这将是相对低效的。 / p>
您可以通过在用户计算机脱机以指向主服务器时更改用户计算机的DNS条目来解决此问题,但如果没有极短的TTL,则无法解决此问题。
您将遇到的另一个问题是跟踪会话。如果没有所有用户计算机都可访问的某种共享会话状态服务器,您可能无法在此设置中非常有效地使用会话。虽然cookie应该仍然有用。
答案 1 :(得分:0)
在网络中,负载平衡是一种将工作负载均匀分布在两台或多台计算机,网络链路,CPU,硬盘驱动器或其他资源上的技术,以便获得最佳资源利用率,最大化吞吐量,最大限度地缩短响应时间并避免超载。使用具有负载平衡的多个组件而不是单个组件可以通过冗余提高可靠性。负载平衡服务通常由专用程序或硬件设备(如多层交换机或DNS服务器)提供。
以及here
中更有趣的内容除了负载平衡之外,您还需要在“用户计算机”上设置或多或少类似的环境
答案 2 :(得分:0)
这听起来像是1部分代理,1部分负载均衡器,以及大约100部分灾难。
如果我不得不猜测,我会说你正试图建立一些相对匿名的洪流......但我可能错了。如果我是对的,那么HTTP就完全是错误的协议。
答案 3 :(得分:0)
你可以使用dns,我可以为每台为用户提供服务的机器设置一个主机名:
www in A xxx.xxx.xxx.xxx # ip address of machine 1
www in A xxx.xxx.xxx.xxx # ip address of machine 2
www in A xxx.xxx.xxx.xxx # ip address of machine 3
然后当其他人上线时,您可以添加到dns条目:
www in A xxx.xxx.xxx.xxx # ip address of machine 4
唯一的问题是,您必须降低每个记录的生存时间(TTL)条目以使其更小(我认为默认值为86400 - 1天)
如果计算机出现故障,您将不得不删除dns条目,但我认为这是向任何网站添加容量的最不密集的方式。 Jeff Attwood在这里有更多信息:is round robin dns good enough?