Nginx:一次调用所有上游

Nginx: Call all upstreams at once

我如何才能一次调用所有上游并return第一个响应的结果并且响应不会是 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 脚本,您可以将它发送到任何您想要的地方。

请注意,上述方法对解决性能问题没有用,但可以让您出于 test/debug 目的将实时流量镜像到开发服务器。

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