我如何一次调用所有上游并返回第一个响应的结果,并且响应不会是 404?
示例: 对“serverX.org/some-resource.png”上的负载均衡器的调用会创建两个请求:
srv1.serverX.org/some-resource.png srv2.serverX.org/some-resource.png
srv2 响应速度更快,并且将响应显示给用户。 这有可能吗? :)
谢谢!
简短的回答,不。您无法完全按照您所描述的 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 脚本,您可以将其发送到您想要的任何地方。
注意,上述方法对于解决性能问题没有用,但可以让您执行诸如将实时流量镜像到开发服务器以进行测试/调试之类的操作。
最后一个这个似乎提供了您想要的功能,但请记住,它并不是为您想要的用途而构建的。