适用于 2 个不同集群(Web、API)的单个 Nginx 负载均衡器

适用于 2 个不同集群(Web、API)的单个 Nginx 负载均衡器

我想知道,如果 Web 服务器和 API 服务器都使用端口 80,是否可以使用单个 Nginx 服务器来平衡负载。此设置将有 5 台服务器,1 台 Nginx 服务器和 4 台 Apache 服务器。我希望在访问 web.example.com 时平衡 Web 服务器。同样,我希望在访问 api.example.com 时平衡 api 服务器。

这可能吗或者我需要另一个 nginx 服务器?

答案1

您有两种可能的方法:

1. 两个农场共用一个 VIP:

在这种情况下,您的 VIP 将是您的NGinx服务器单一 IP 地址。

http {
  upstream web.example.com {
    least_conn;
    server mywebserver1.loc;
    server mywebserver2.loc;
    server mywebserver3.loc;
  }

  upstream api.example.com {
    least_conn;
    server myapiserver1.loc;
    server myapiserver2.loc;
    server myapiserver3.loc;
  }

  server {
    listen 80;
    server_name web.example.com;
    location / {
      proxy_pass http://web.example.com
    }

   server {
    listen 80;
    server_name api.example.com;
    location / {
      proxy_pass http://api.example.com
    }

  }

2. 每个农场有专属 VIP

在这种情况下,您需要主机上的两个 IP 地址NGinx

假设:

  • 192.168.1.1 用于 Web(eth0)
  • 192.168.1.2 用于 Api (eth1)

    http {
      upstream web.example.com {
      least_conn;
      server mywebserver1.loc;
      server mywebserver2.loc;
      server mywebserver3.loc;
    }
    
    upstream api.example.com {
      least_conn;
      server myapiserver1.loc;
      server myapiserver2.loc;
      server myapiserver3.loc;
    }
    
    server {
      listen 192.168.1.1:80;   # <-- vHost listen on IP
      server_name web.example.com;
      location / {
        proxy_pass http://web.example.com
      }
    
     server {
      listen 192.168.1.2:80;   # <-- vHost listen on IP
      server_name api.example.com;
      location / {
        proxy_pass http://api.example.com
      }
    
    }
    

upstream然后,您有多个选项可以在指令中管理负载平衡和故障转移,例如:

  • weight
  • max_fails
  • fail_timeout

http://wiki.nginx.org/NginxHttpUpstreamModule#upstream

此外,您还有多种负载平衡方法:

  • least-connected
  • Session persistence

http://nginx.org/en/docs/http/load_balancing.html

相关内容