一、前言
Nginx 是目前最常用的高性能反向代理、负载均衡服务器,常用于微服务集群、Web 项目集群分发。本文整理 Nginx 反向代理 + 6 种负载均衡策略 完整配置,复制即可使用,适合生产环境直接部署。
二、Nginx 反向代理通用基础配置
1、反向代理必备请求头
做负载均衡反向代理,必须携带以下 header,否则后端拿不到真实 IP 和域名。
nginx
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 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
2、基础整体架构
upstream:定义后端服务集群server:监听端口,做反向代理转发
三、6 种 Nginx 负载均衡策略 完整配置
策略 1:默认轮询(Round Robin)
特点:默认规则,请求按顺序依次分发,平均分配,无会话保持。
nginx
upstream backend_server {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name lb.test.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
策略 2:权重负载均衡 weight
特点:权重值越高,被分配的请求越多;适合后端服务器配置性能不一样的场景。
nginx
upstream backend_server {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=3;
server 192.168.1.12:8080 weight=2;
}
策略 3:IP 哈希 ip_hash
特点 :同一客户端 IP 永远分配到同一台后端节点,解决会话丢失、登录失效问题。
nginx
upstream backend_server {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
策略 4:最少连接 least_conn
特点 :自动把请求分发到当前连接数最少的服务器,适合后端处理速度参差不齐的场景。
nginx
upstream backend_server {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
策略 5:URL 哈希 hash $request_uri
特点:根据请求 URL 做哈希,相同 URL 固定访问同一节点,适合静态资源缓存、文件服务。
nginx
upstream backend_server {
hash $request_uri;
hash_method crc32;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
策略 6:Fair 智能负载均衡(第三方模块)
特点 :根据后端响应时间 自动分配,响应越快分到的请求越多;需要额外安装 ngx_http_upstream_fair_module 模块。
nginx
upstream backend_server {
fair;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
四、upstream 常用参数详解
nginx
# 标记为备用节点,主节点挂了才启用
server 192.168.1.12:8080 backup;
# 标记节点永久下线
server 192.168.1.10:8080 down;
# 健康检查:最大失败3次,30秒内不再转发
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
五、Nginx 常用命令
bash
运行
# 检查配置语法
nginx -t
# 重载配置(不重启服务)
nginx -s reload
# 启动、停止、重启
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# 查看日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
六、总结
- 轮询:默认平均分配
- 权重:配置性能不同用
- ip_hash:需要会话保持、登录状态
- least_conn:后端处理速度不一致
- url_hash:静态资源、缓存服务
- fair:按响应时间智能调度(需第三方模块)