如何配置 nginx 代理以便从服务器获取最快的响应

如何配置 nginx 代理以便从服务器获取最快的响应

存在一些具有相同静态文件的远程服务器

http://site1.com/image.png
http://site2.com/image.png
http://site3.com/image.png

例如,所有这些服务器都不可靠,并且只能在几秒钟后给出响应。

我该如何配置我的 nginx 代理以便从其中一个获取最快的响应?

我知道上游模块,但只有连续请求的示例。

是否有配置可以使用并行并发请求来实现?谢谢。

答案1

您误解了 nginx 的运行方式。

请求不是一个接一个地处理的,也不是同时处理的(这是不可能的)。nginx 在处理请求的过程中对对应于不同阶段的事件做出反应,从而对它们进行多路复用。

上游你指向的模块(及其同名指令)是可行的方法,以及代理密码指示。

你关注的焦点可能是$upstream_response_time变量。顾名思义,它存储上游服务器的响应时间,并可能被处理以改变 nginx 应选择的后端服务器的选择。

为此,您可以调整上游服务器组以为每个服务器添加权重server以及不同的标志来影响默认的循环机制。

然后,您可以通过生成包含在上游服务器组配置中的文件,根据收集到的响应时间更改权重。请注意,更改配置需要重新加载 nginx。

答案2

该函数存在于 nginx 商业订阅中 least_time 使用的上游后端指令控制跟踪两个响应时间中的哪一个:接收响应头的时间(header)或接收完整响应的时间(last_byte)。你可以在这里阅读更多相关信息https://www.nginx.com/blog/choosing-nginx-plus-load-balancing-techniques/例子

upstream backend {
    least_time (header | last_byte);

    server web1;
    server web2;
    server web3;
}

server {
server_name www.example.com;

location / {
   proxy_pass http://backend;
    }
}

或者你可以使用 $upstream_queue_time 来保存请求在上游队列中花费的时间,多个响应的时间用逗号和冒号分隔,就像 $upstream_addr 变量中的地址一样。你可以在这里阅读更多相关信息http://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_response_time

我目前正在寻找相同的解决方案,我发现 Nginx C 模块将 Lua API 暴露给 ngx_lua 用于 Nginx 上游,您可以在此处阅读更多信息https://github.com/openresty/lua-upstream-nginx-module

如果你找到了一个很好的解决方案请回复

相关内容