Nginx 循环负载均衡上游服务器不按顺序排列,chrome、firefox、IE 浏览器之间的行为发生变化

问题描述 投票:0回答:2

在虚拟机(ubuntu服务器)中配置Nginx服务器并向Windows主机开放80端口, 使用基本节点应用程序对 5 个 Ubuntu 服务器执行相同的操作,该应用程序分别使用 5 个服务器打印 1,2,3,4,5。 配置Nginx.conf文件

events{
}

http{
        upstream serverslist {
#               Server 8001
                server 192.168.100.2:3000;
#               Server 8002
                server 192.168.100.3:3000;
#               Server 8003
                server 192.168.100.4:3000;
#               Server 8004
                server 192.168.100.5:3000;
#               Server 8005
                server 192.168.100.6:3000;
        }
        server {
                location / {
                        proxy_pass      "http://serverslist/";
                }
        }
}

从 Nginx 服务器单独对这些服务器进行 Ping 和 Curl 工作完美,并返回预期结果。 即在每个

curl localhost
给出 1, 2, 3, 4, 5, 1, 2, 3, 4, 5。按此顺序。这是预期的。

但是当我在 Chrome 浏览器中加载 Nginx 服务器时,我得到输出 1, 3, 5, 2, 4, 1, 3, 5, 2, 4。
当我在 Firefox 中加载 Nginx 服务器时,我得到输出 1,2,3,4,5。(正确)
当我在 android 上的 duckduckgo 浏览器中加载 Nginx IP 时,它给出 5, 4, 3, 2, 1, 5, 4, 3, 2, 1。

我尝试添加许多基于代理的标头和来自网络的普通标头,找不到任何解决方案来在所有浏览器中获得相同的输出,即 1, 2, 3, 4, 5, 1, 2, 3, 4, 5. 在同一服务器的每次重新加载时。

任何帮助都会很棒。

google-chrome nginx virtualbox reverse-proxy
2个回答
0
投票

编辑3:发现一个有趣的问题。 在 Chrome 中,每次我访问我的网站时,它都会发出两个调用,无论它们被调用到我的网站/我的网站和我的网站的 /favicon.ico。 我没有 /favicon.ico。 我认为正在发生什么

  1. 当 Nginx 收到我网站的请求时,它正在加载上游的第一个服务器。
  2. 当 chrome 从我的网站加载 / 时,它还会调用我网站的 /favicon.ico,这会导致对 Nginx 进行新的调用,以便它从上游的下一个服务器加载 .ico 文件。
  3. 发生这种情况,服务器 1,2,3 会按照 1(来自 2 的 ico 文件)、3(来自 1 的 ico 文件)、2(来自 3 的 ico 文件)的顺序加载。并循环重复。

一旦我停止在 Nginx 中加载 /favicon.ico,我的三个上游服务器 1,2,3 就会按循环顺序 1,2,3 加载。

我将其放在上游服务器中以禁用从 Nginx 加载 favicon.ico。

location = /favicon.ico {
  log_not_found off;
}

希望遇到此问题的任何人都觉得这很有用。

编辑 2:解决了问题,负载平衡在 Nginx conf 文件内的静态文件和静态服务器上运行良好。 但我的应用程序是由节点加载的,因此必须在启动所有节点服务器后启动Nginx。 当我在 Nginx 运行时重新启动应用程序服务器时,问题再次出现。 现在没有问题会很快更新

编辑1:这不再对我有用,昨天还有效,今天继续使用相同的配置,问题再次出现。

我的设置也有同样的问题。 经过大量代理设置、VirtualBox 设置和网络编辑后,什么对我有用。

在 HTTP 块中添加额外的服务器块。

server{
}

并重新加载 Nginx 服务。

它对我有用,在 chrome 和 firefox 按给定顺序加载服务器后重新加载后,我删除了服务器块,它仍然有效。

不知道为什么首先提出这个问题。 希望这有助于解决您的问题。


0
投票

这是为了让事情变得更清楚一点,因为@anonymoust 的答案是正确的。 这似乎是浏览器问题。如果你只是卷曲,效果很好。这似乎会影响所有基于 chromium 的浏览器。我尝试过 Chrome、Brave 和 Edge,它们都有相同的行为。 Firefox 运行得非常完美。 就我而言,为了让它在 Chrome 中运行,我需要第三次编辑来解决问题:

我将其放在上游服务器中以禁用从 Nginx 加载 favicon.ico。

location = /favicon.ico {
    log_not_found off;
}
© www.soinside.com 2019 - 2024. All rights reserved.