nginx的负载均衡主要通过upstream模块来实现
nginx的负载均衡策略如下:
| 策略 | 配置 | 适用场景 |
|---|---|---|
| 轮询 (默认) | 无需额外配置 | 服务器性能相近 |
| 权重 | weight=3 |
服务器性能差异大 |
| IP哈希 | ip_hash |
需要会话保持 |
| 最少连接 | least_conn |
请求处理时长不均 |
| 响应时间 (商业版) | least_time |
Nginx Plus |
对于各种策略模式的简单示例配置
权重配置示例
yaml
upstream backend_servers {
server 192.168.1.10:8080 weight=3; # 承担3倍流量
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=1;
}
IP哈希(会话保持)
yaml
upstream backend_servers {
ip_hash; # 同一IP固定分配到同一台服务器
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
健康检查与容错
yaml
upstream backend_servers {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 backup; # 备用服务器
# max_fails=3:连续失败3次认为服务器不可用
# fail_timeout=30s:30秒内不再向故障服务器发送请求
# backup:仅当所有主服务器故障时才启用
}
有个进阶用法如下,可以起到按模块功能来做不同的负载
yaml
upstream user_service {
server 10.0.1.10:8080;
}
upstream order_service {
server 10.0.1.20:8080;
}
server {
location /user/ {
proxy_pass http://user_service;
}
location /order/ {
proxy_pass http://order_service;
}
}
以上是相关负载均衡的一些基础模式的介绍,具体怎么配置可以按照自己的需求去做选择,下面来做实战配置
注意
upstream和serve是一个层级,都在http模块下,即:
yaml
http {
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
一般nginx的配置文件默认在/etc/nginx下,如果找不到nginx配置文件,可以使用nginx -t指令,在输出内容中会展示nginx的配置文件所在位置,如果无法直接使用nginx命令,则通过find命令查找nginx.conf即可
- 打开nginx.conf文件,一般使用vim或者nano,根据自己服务器实际情况来打开即可
- 在nginx.conf文件中输入按自己需求调整好的配置内容,以下为我当前使用的示例配置,是一个本地多节点负载的配置示例:
yaml
upstream api_backend {
least_conn; # 最少连接策略
server 127.0.0.1:9097 weight=5 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9098 weight=5 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9100 weight=3 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9104 backup;
}
server {
listen 9096;
# 静态资源不经过负载均衡
location ~* \.(jpg|png|css|js)$ {
root /var/www/static;
expires 7d;
}
location / {
proxy_pass http://api_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 确保后端能识别真实请求来源,保证请求头正常
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_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
- 输入内容后保存文件
- 使用nginx -t来检查nginx配置文件

- 看到successful后,执行nginx -s reload完成nginx重启即可验证负载均衡