Nginx

用於 2 個不同集群(web、api)的單個 Nginx 負載均衡器

  • May 11, 2015

我想知道如果兩者都使用埠 80,是否可以使用單個 Nginx 伺服器來平衡我的 Web 伺服器和 api 伺服器。在此設置中,將有 5 台伺服器,1 台 Nginx 和 4 台 Apache 伺服器。我希望在訪問 web.example.com 時平衡 Web 伺服器。同樣,我希望在訪問 api.example.com 時平衡 api 伺服器。

這是可能的還是我需要另一個 nginx 伺服器?

您有兩種可能的方法:

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

引用自:https://serverfault.com/questions/691241