如何一次调用所有上游并从第一个响应中返回结果,响应将不是404?
实施例: 在“serverX.org/some-resource.png”调用负载均衡器会创建两个请求:
srv1.serverX.org/some-resource.png srv2.serverX.org/some-resource.png
srv2响应更快,并向用户显示响应。 这有可能吗? :)
谢谢!
答案 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似乎提供了您想要的功能,但请记住,这些内容并非为您的使用而构建。