Nginx:一次调用所有上游

问题描述 投票:0回答:1

我如何一次调用所有上游并返回第一个响应的结果,并且响应不会是 404?

示例: 对“serverX.org/some-resource.png”上的负载均衡器的调用会创建两个请求:

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

srv2 响应速度更快,并且将响应显示给用户。 这有可能吗? :)

谢谢!

nginx load-balancing mirror
1个回答
3
投票

简短的回答,不。您无法完全按照您所描述的 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 脚本,您可以将其发送到您想要的任何地方。

注意,上述方法对于解决性能问题没有用,但可以让您执行诸如将实时流量镜像到开发服务器以进行测试/调试之类的操作。

最后一个这个似乎提供了您想要的功能,但请记住,它并不是为您想要的用途而构建的。

© www.soinside.com 2019 - 2024. All rights reserved.