假设我的 nginx 配置了 3 个上游,并且我发出下载文件的请求。三个上游中的一个将处理该请求。
响应是否直接来自上游?或者响应是否来自网关(配置上游的机器)?
如果是第一种情况,那么它是如何工作的?它是否类似于 TCP Handoff,但在 HTTP 级别?
答案1
直接从后端向客户端发送回复的设置称为 DSR 负载平衡。DSR 是直接服务器返回的缩写。在这种设置中,负载平衡器只需更新 IP 下方使用的协议层上的目标地址,即可将每个 TCP 数据包转发到为此连接选择的后端,如果 IP 下方的层不直接适用,则可以插入额外的 IP 标头,从而有效地将数据包从前端隧道传输到后端。
DSR 在网络方面稍微复杂一些,但它具有性能优势,并且使客户端 IP 直接对后端可见。
我不确定 nginx 是否支持 DSR 负载平衡。几次搜索都表明它不支持。三年前的 Nginx 论坛帖子
答案2
在 nginx 中,当您请求下载文件时,网关(我想是您的 nginx 前端)会为该请求选择一个后端,并查询该服务器以获取要发送回您的文件。此数据通过网关传递给请求者,因此对于客户端来说,文件看起来像是来自平衡器而不是您的后端。这就是为什么 Anycast DNS(或简单循环 DNS)通常与 CDN 一起使用而不是直接平衡器的原因。