存在一些具有相同静态文件的远程服务器
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
如果你找到了一个很好的解决方案请回复