2011-12-05 18 views
2

我有一些通过nginx进行负载均衡的PHP web服务器。如何在负载平衡(nginx)环境中将响应从外部API调用回请求的Web服务器?

Web服务器需要向外部API(我无法控制)发出请求,然后接收响应。

1)确保将响应返回到正确的(请求)Web服务器的方式有哪些?

2)每个的优缺点是什么?

谢谢!

更新(2011-12-05下午12点38分):

一些更多的背景资料,以什么努力来实现。

我们运行一个面向客户端的应用程序,该应用程序具有许多使用nginx进行平衡的php web服务器。客户端可以定向到任何这些Web服务器。

   nginx 
       | 
-------------------------------- 
     |  |  | 
     web1  web2  web3 

有时我们需要从外部(第三方API)获取数据,然后我们返回客户端。对该数据的请求可能来自任何Web服务器(取决于nginx最初指向哪个客户端)。我们需要确保来自API的数据返回到请求的Web服务器以显示给客户端。

+0

答复将始终直接返回给请求的Web服务器,对吗?当然,请求网络服务器会向远程API打开一个直接的TCP流,这意味着响应将使用同一个TCP流返回 - 并且将始终返回到正确的位置。除非你在你的服务器设置了API的某种代理 - 这会使得负载平衡毫无意义,因为你给自己一个单点故障。即使那样,我也会认为这仍然不成问题,除非代理以非常奇怪的方式设计。 – DaveRandom

+0

@DaveRandom“当然,请求的Web服务器打开一个直接的TCP流到远程API” - 我认为你是对的。从192.168.1.2开始,您通过nginx public ip xx.yy.zz.pp发出请求,并且API响应回到公共IP,它可能被重定向到192.168.1.3。 ip_hash指令阻止了这一点。 –

+0

@narcisradu但它不只是NAT吗?这听起来像是我应该在第3层(TCP/IP模型)处理的事情,在第4层添加了一些东西来增加复杂度和处理开销。除非有我丢失的东西... – DaveRandom

回答

1

您可以使用:http://wiki.nginx.org/HttpUpstreamModule#ip_hash

缺点:有时一台服务器可能会非常繁忙,但你需要基准解决方案,并找到问题可能是。

+0

我们已经使用ip_hash,以便客户端每次都被定向到同一个Web服务器。 但是,当我们的服务器需要从外部API获取数据时,这并没有帮助。 API提供商的IP可能每次都被定向到相同的Web服务器,但我们的任何Web服务器都可能最初提出了该请求。例如所有的API返回可能会被定向到web1基于API提供商的IP是相同的,但请求可能来自web1,web2或web3 – TheKeys

+0

现在我明白了!你不知道什么Web服务器启动了API调用,那么如何将API返回重定向到适当的API而不知道哪一个是实际的?一个肮脏的解决方案:使用不同的上游,但我需要考虑如何实际执行它。 –

+0

你能解释一下为什么你需要将API的答案重定向到相同的后端服务器?我假设你实际上可以在任何其他服务器上收到答案,并在内部获取响应。但这更多的是架构问题,如果不真正了解应用程序中发生了什么,很难提供解决方案。 –

相关问题