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 似乎提供了您想要的功能,但请记住,它并不是为您似乎想要的用途而构建的。
我如何才能一次调用所有上游并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 似乎提供了您想要的功能,但请记住,它并不是为您似乎想要的用途而构建的。