C#,连接到平衡器后面的特定服务器

C#,连接到平衡器后面的特定服务器

似乎在任何地方都找不到关于这一点的线索。

故事(系统图) 在我工作的公司中,我们有 5 台 IIS 服务器...每台服务器都有许多网站(每台服务器都有相同的站点)所有服务器都在平衡器后面,因此如果您输入主机名,您就不知道会定向到哪台服务器。

所有服务器以及每台服务器的所有虚拟网站都在 HOST 文件中,如果我在主机文件中选择一个服务器和一个站点,我将被定向到该服务器和站点,并且一切正常。

现在我的问题 我正在尝试连接到每台服务器并检查每台服务器上的页面......

发生的情况是,我总是被重定向到同一个服务器,而不是不同的服务器......

我正在为每台服务器调用此代码,其中 Url 是页面的名称,并且“((WebPageTest)test).ServerAddress”会随着每台服务器的变化而变化……

        string htmlText = string.Empty;
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.MyDomain.com" + Url);
            request.Host = ((WebPageTest)test).ServerAddress;
            request.UserAgent = "Tests UserAgen";
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            htmlText = reader.ReadToEnd();
            htmlText = "OK";

        }
        catch (Exception exp) {
            htmlText = exp.Message;
        }
        return htmlText;

有人知道如何连接到每个服务器中的正确服务器和正确的网站,以便我能够检查每个站点上的页面吗?

编辑:我无法更改平衡器或防火墙或类似设置中的设置....我需要模拟使用主机文件时发生的情况。当主机文件中未添加任何服务器时,平衡器会决定将请求发送到哪个服务器,但是当我使用主机文件时,我会被定向到特定服务器....这是我需要在代码中执行的操作...是否有任何内容需要添加到标头中才能执行此操作,我已经尝试了所有我能想到的方法?

非常感谢,

埃雷兹

答案1

由于您想要测试特定服务器,因此您应该完全绕过负载均衡器,或设置指定的负载均衡器管道。例如,如果您的 DNSwww.mySite.com指向您的 ip/端口 ( 20.20.20.20port 80),并且该端口被转发到您的负载均衡器,那么您应该有另一个转发,比如说,端口800internal server 1801internal server 2,...,它将通过以下方法之一重定向:

  1. 直接转发到服务器
  2. 转发到仅与一台服务器平衡的虚假负载均衡器。
  3. 转发到同一个负载均衡器,但使用不同的配置,只与一台服务器进行平衡。

答案2

我有几个问题想问你?1. 你使用的是 Radware 吗?2. 负载均衡器之间是否有防火墙?防火墙也可以是你的默认网关。3. 由于你正在更改主机文件,这意味着你的系统/默认网关无法解析 IP。你的防火墙策略有问题吗?给出 IP 来解析 URL 是不可取的。4. 负载均衡器上的策略是如何定义的。5. 当负载均衡器处于图中状态时,客户端不必担心他被重定向到哪个 IIS 服务器。6. 定义策略时,请确保它是通过 URL 而不是公共 IP 地址定义的。7. 还要检查负载均衡器的默认网关。

我们还在使用负载平衡器,我们已经对其进行了配置,以便当访问 Web 服务器的系统位于同一网络上或通过防火墙/代理访问时它可以工作。

答案3

负载平衡器中有一个设置。如果池中有 3 台服务器,则如果未设置标志,通常会转到一台服务器。如果您使用的是 Radware,我可以告诉您标志设置。

相关内容