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 可以高效实现高可用、高性能的负载均衡。