NGINX负载均衡配置详解
准备工作
47.112.199.100 #反向代理服务器
47.112.199.101 #真实服务器1
47.112.199.102 #真实服务器2
1.反向代理服务器配置
worker_processes 1; events { worker_connections 1024; } http { # 定义后端服务器组 upstream backend { # 默认轮询算法(请求按顺序分配) server 47.112.199.101; server 47.112.199.102; # 也可以使用其他算法,例如: # ip_hash; # IP哈希算法,同一IP请求固定到同一服务器 # weight=2; # 加权轮询,第一个服务器权重为2,第二个为1 } # 配置反向代理服务器 server { listen 80; server_name hyztest.com; # 可选访问域名 location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 可选:设置超时时间 proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; } } }2.真实服务器配置
两台后端服务器配置一般保持一致
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /data/www/html; index index.html index.html; } } }3.创建测试页面
在两台后端服务器中,分别创建测试页面
vim/data/www/html/index/html#节点1<h1>Server 1: 47.112.199.101</h1>#节点2<h1>Server 2: 47.112.199.102</h1>4.启动NGINX访问测试
在浏览器中输入域名hyztest.com访问,可以看到server1和server2轮询访问
5.常用负载均衡算法
① 轮询(默认):默认算法,请求按顺序分配到各服务器
upstream backend { server 47.112.199.101; server 47.112.199.102; }② 加权轮询:适用于服务器性能不均的场景,如新老服务器混用
upstream backend { server 47.112.199.101 weight=3; # 性能较强服务器处理3份请求 server 47.112.199.102 weight=1; # 性能较弱服务器处理1份请求 }③ IP哈希:基于客户端IP哈希,同一IP请求固定到同一服务器,适合需要会话保持的场景
upstream backend { ip_hash; server 47.112.199.101; server 47.112.199.102; }④ 最少连接:动态选择当前连接数最少的服务器,适合长连接场景(如WebSocket)
upstream backend { least_conn; server 47.112.199.101; server 47.112.199.102; }⑤ URL哈希(需要第三方模块):基于请求URL哈希,相同URL的请求分配到同一服务器,适合缓存服务器
upstream backend { hash $request_uri consistent; server 47.112.199.101; server 47.112.199.102; }⑥备用服务器:当主服务器全部不可用时,请求才会分配到备用服务器
upstream backend { server 47.112.199.101; server 47.112.199.102 backup; }6.高级负载均衡算法
①加权轮询 + 健康检查
upstream backend { server 47.112.199.101 weight=3 max_fails=2 fail_timeout=30s; server 47.112.199.102 weight=1 max_fails=2 fail_timeout=30s; }②IP哈希+健康检查
upstream backend { ip_hash; server 47.112.199.101 max_fails=2 fail_timeout=30s; server 47.112.199.102 max_fails=2 fail_timeout=30s; }参数说明
max_fails=2:在fail_timeout时间内,如果请求失败2次,就将该服务器标记为"down"fail_timeout=30s:标记为"down"后,30秒内不再向该服务器发送请求- 自动剔除:当服务器宕机时,Nginx会自动停止向该服务器发送请求
imeout=30s;
}
> 参数说明 > - `max_fails=2`:在`fail_timeout`时间内,如果请求失败2次,就将该服务器标记为"down" > - `fail_timeout=30s`:标记为"down"后,30秒内不再向该服务器发送请求 > - **自动剔除**:当服务器宕机时,Nginx会自动停止向该服务器发送请求 > - **自动恢复**:当服务器恢复后,Nginx会继续向其发送请求