Nginx
用於 2 個不同集群(web、api)的單個 Nginx 負載均衡器
我想知道如果兩者都使用埠 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