Nginx 作为高性能的反向代理服务器,可以通过 upstream
模块轻松实现负载均衡。以下是详细的配置方法和关键参数说明:
在 nginx.conf
的 http
块中添加以下配置:
http {
upstream backend_servers {
# 定义后端服务器列表(支持IP、域名、端口)
server 192.168.1.100:80;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers; # 将请求转发至upstream组
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Nginx 支持多种负载均衡算法:
默认策略,请求按顺序分配到各服务器:
upstream backend_servers {
server 192.168.1.100;
server 192.168.1.101;
}
根据服务器性能分配权重:
upstream backend_servers {
server 192.168.1.100 weight=3; # 3/5的请求
server 192.168.1.101 weight=2; # 2/5的请求
}
同一客户端IP始终访问同一后端(适合会话保持):
upstream backend_servers {
ip_hash;
server 192.168.1.100;
server 192.168.1.101;
}
优先分配给当前连接数最少的服务器:
upstream backend_servers {
least_conn;
server 192.168.1.100;
server 192.168.1.101;
}
按后端服务器的响应时间分配请求(需安装 nginx-upstream-fair
模块)。
标记不可用服务器,自动剔除故障节点:
upstream backend_servers {
server 192.168.1.100 max_fails=3 fail_timeout=30s; # 30秒内失败3次则临时剔除
server 192.168.1.101 backup; # 备用服务器(其他服务器不可用时启用)
}
复用后端连接,提升性能:
upstream backend_servers {
server 192.168.1.100;
keepalive 32; # 保持的连接数
}
http {
upstream backend {
least_conn;
server 10.0.0.1:80 weight=5;
server 10.0.0.2:80 max_fails=3 fail_timeout=30s;
server 10.0.0.3:80 backup;
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
bash
nginx -t # 测试配置语法
nginx -s reload
ngxtop
或 nginx-status
模块监控请求分布。access.log
和错误日志。ip_hash
或通过应用层(如Redis)共享Session。proxy_connect_timeout
。通过以上配置,Nginx 可以高效实现横向扩展的负载均衡,提升系统可用性和性能。