我想知道,如果 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