upstream是Nginx中用于定义后端服务器组的模块,主要用于负载均衡和反向代理场景。它允许你将多个后端服务器组合在一起,Nginx会根据配置的负载均衡策略将请求分发到这些服务器上。
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server backend3.example.com;
}
weight
参数指定服务器的权重,默认为1upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
server backend3.example.com backup;
}
max_fails
:允许失败的次数,超过后认为服务器不可用fail_timeout
:服务器被标记为不可用的时间backup
:标记为备用服务器,只有当其他服务器不可用时才使用upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
Nginx Plus版本支持主动健康检查:
upstream backend {
zone backend 64k;
server backend1.example.com;
server backend2.example.com;
health_check;
}
开源版可以通过第三方模块或被动健康检查实现。
upstream web_servers {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
upstream backend {
server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
通过合理配置upstream,可以显著提高Web应用的可用性、可靠性和性能。