Nginx 主要通过 upstream 模块 实现负载均衡,将客户端请求分发到多个后端服务器(如 Web 服务器、应用服务器等)。以下是核心实现方式和配置详解:
在 nginx.conf
中通过 upstream
块定义后端服务器组,再通过 proxy_pass
转发请求。
http {
upstream backend_servers {
server 192.168.1.101:80; # 后端服务器1
server 192.168.1.102:80; # 后端服务器2
server 192.168.1.103:80; # 后端服务器3
}
server {
listen 80;
location / {
proxy_pass http://backend_servers; # 请求转发到upstream组
}
}
}
Nginx 支持多种负载均衡算法:
nginx
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
nginx
upstream backend {
server 192.168.1.101 weight=3; # 3/5的请求
server 192.168.1.102 weight=2; # 2/5的请求
}
nginx
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
nginx
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
nginx-upstream-fair
模块)。Nginx 默认通过被动健康检查(失败后标记服务器为不可用),也可通过第三方模块(如 nginx_upstream_check_module
)实现主动检查。
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s; # 3次失败后暂停30秒
server 192.168.1.102;
}
backup
,仅在主服务器不可用时启用。
nginx
server 192.168.1.103 backup;
nginx
upstream backend {
keepalive 32; # 保持的连接数
}
http {
upstream backend {
least_conn;
server 192.168.1.101 weight=2;
server 192.168.1.102;
server 192.168.1.103 backup;
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
ip_hash
或应用层方案(如Redis共享Session)。upstream
配置后需重载Nginx(nginx -s reload
)。通过以上配置,Nginx 可以高效实现高可用、高性能的负载均衡。