Nginx:立即呼叫所有上游

时间:2017-05-11 11:15:14

标签: nginx load-balancing mirror

如何一次调用所有上游并从第一个响应中返回结果,响应将不是404?

实施例: 在“serverX.org/some-resource.png”调用负载均衡器会创建两个请求:

srv1.serverX.org/some-resource.png srv2.serverX.org/some-resource.png

srv2响应更快,并向用户显示响应。 这有可能吗? :)

谢谢!

1 个答案:

答案 0 :(得分:2)

简短回答,不。你不能完全按照你所描述的nginx做的。稍微想一想,这个操作不能称为负载平衡,因为整个后端获得了总流量。

一个很好的问题是你认为你可以用这个来完成什么?更好的表现?

您可以确定在服务器之间进行简单的负载平衡可以获得更好的结果,因为必须处理一半的流量。

如果您有一个更复杂的架构,即从后端服务器的不同路径的不同负载,我们可以讨论更复杂的负载平衡方法。

因此,如果您的目的不是表现,那么您可以做一些事情:

1)将请求发送到第一台服务器后,您可以使用post_action将其发送给另一台服务器。

location ~ ^/*.png {
    proxy_pass http://srv1.serverX.org;
    ...

    post_action @mirror_to_srv2;
    ...
}

location @mirror_to_srv2 {
    proxy_ignore_client_abort on;
    ...
    proxy_pass http://srv2.serverX.org;
}

2)请求在nginx中可以作为变量使用,因此使用一些lua脚本可以将它发送到任何你想要的地方。

注意以上方法对解决性能问题无效,但是可以让您将实时流量镜像到开发服务器以进行测试/调试。

最后this one似乎提供了您想要的功能,但请记住,这些内容并非为您的使用而构建。

相关问题