首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HTTP (而不是dns)将请求重定向到缓存服务器的解决方法

使用HTTP (而不是dns)将请求重定向到缓存服务器的解决方法
EN

Stack Overflow用户
提问于 2014-09-07 12:26:38
回答 1查看 293关注 0票数 0

假设浏览器请求

代码语言:javascript
复制
aaa.com

该域托管在负载均衡器中。

Dns将完成它的工作,并使浏览器找到该请求的负载均衡器。

在负载均衡器收到请求后,它应该将浏览器重定向到合适的反向缓存服务器。http (3XX)和Location中的重定向方法使得浏览器可以更改其请求头中的Host指令。这意味着如果缓存服务器的地址是cache.bbb.com,则Host指令将更改为cache.bbb.com,这将破坏所有缓存机制,因为缓存服务器期望aaa.com找到正确的源。

此外,这会将浏览器地址栏中的aaa.com地址更改为cache.bbb.com。

如果我可以使用dns,这个问题就可以很容易地解决。但我仍然在寻找HTTP的解决方案。

我想要的只是告诉浏览器从另一个地址请求相同的域名

就像dns做的那样。

你们有没有想过用HTTP或者其他变通方法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2014-09-07 12:50:56

在负载均衡器收到请求后,它应该将浏览器重定向到合适的反向缓存服务器。http (3XX)和Location中的重定向方法使得浏览器可以更改其请求头中的Host指令。

我不确定您是从哪里获得这些信息的;因为这不是负载均衡器的典型工作方式。

如果他们这样做了,那么POST请求将不起作用,因为3xx将导致来自浏览器的GET请求,从而丢失任何POST有效负载。

根据您需要的性能,您可以执行多种类型的负载平衡。但是,在所有情况下,它都是这样工作的:

代码语言:javascript
复制
Load Balancer > Reverse Proxy > Application Server

这里没有重定向,因为在某些情况下,反向代理也是负载均衡器(nginx通常是这样配置的)。整个请求都会被传递。

现在,在某些场景中(同样,取决于您的应用程序使用配置文件),可能有一个或多个静态缓存主机;它们存储您缓存的资产。它们通常有自己的子域(assets.example.com),或者它们可能被卸载到某个CDN (例如foo.s3.amazon.com)。

应用服务器确保对静态资产的任何请求都将其URL指向缓存服务器;这样,这些请求就不会接触到负载均衡器。

但是,如果您的缓存位于负载均衡器之后,则负载均衡器将配置为将与域前缀匹配的请求路由到不同的后端服务器集。在负载均衡器和反向代理相同的情况下(典型的nginx用例),反向代理直接服务于资产请求。

在所有这些方面-对于浏览器-没有区别,因为FQDN不会改变。DNS配置为多个负载均衡器(您可以使用virtual ip addresses在同一IP上配置多个主机)。

现在,来看看你的实际问题:

我想要的就是告诉浏览器从另一个地址请求相同的域名,就像

所做的那样。

这样做的方法是让浏览器从一个域请求,然后让负载均衡器或反向代理侦听来自该域的所有请求。

然后,LB/RP将决定(基于所请求的资源)是直接为请求提供服务(就像nginx这样的缓存反向代理的情况一样),还是将其传递给另一台服务器。

在非缓存资产的情况下(例如,如果您请求index.php或类似的资产),LB/RP会将此请求传递到配置为处理该请求的任何后端(或上游,如它们所称)服务器。对于相同的域,可以配置多个服务器来为相同类型的请求提供服务。

因此,您可以配置4个具有相同代码库的后端服务器,以服务于任何以.php结尾的请求。根据LB/RP中配置的规则,这些服务器中的一个将发送请求-关键部分是-此重定向不会使用HTTP发生。

上游服务器处理完请求后,将响应发送回“请求者”(在本例中为LB/RP),然后将请求发送回客户端(浏览器)。

对于浏览器来说,域永远不会改变,而且它完全不知道后台发生了什么。gmail.comgoogle.com等到底是如何工作的。浏览器域没有改变,但是任意数量的服务器(位于任意数量的位置)中的一个实际上正在为请求提供服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25707065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档