ubuntu nginx负载均衡实现方式
小樊
40
2025-12-24 22:18:09
Ubuntu 上使用 Nginx 实现负载均衡
一 安装与准备
- 在 Ubuntu 上安装 Nginx:sudo apt update && sudo apt install nginx。
- 规划后端服务器(示例):192.168.1.101:8080、192.168.1.102:8080、192.168.1.103:8080,确保网络互通并放行 80/443 端口。
- 配置文件路径常用:/etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default(按实际环境选择其一或拆分到 /etc/nginx/conf.d/*.conf)。
二 核心配置步骤
- 定义上游服务组 upstream:使用 upstream 声明后端池;在 location 中用 proxy_pass 转发;设置必要的请求头(如 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto)以透传客户端信息。
- 示例(HTTP,/etc/nginx/sites-available/default 或 /etc/nginx/conf.d/lb.conf):
http {
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name example.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;
}
}
}
- 生效配置:sudo nginx -t && sudo systemctl reload nginx。
三 负载均衡策略与用法
- 轮询 Round Robin(默认):按顺序分发,适合性能相近的后端。
- 加权轮询 Weighted:为更强节点设置 weight,如 weight=3 的节点接收请求更多。
- 最少连接 Least Connections:将请求发给当前连接数最少的节点,适合长连接/耗时差异大的场景。
- IP Hash:基于客户端 IP 做哈希,实现会话保持;后端节点变更会触发重分布。
- URL Hash(一致性哈希):基于 $request_uri 的一致性哈希,适合缓存/回源亲和。
- 示例(策略与参数):
upstream backend {
least_conn; # 最少连接
server 192.168.1.101:8080 weight=3; # 加权
server 192.168.1.102:8080;
server 192.168.1.103:8080 backup; # 备用节点
# ip_hash; # 如需会话保持可启用
# hash $request_uri consistent; # URL 一致性哈希
}
- 健康检查:开源版 Nginx 支持被动检查,常用 max_fails=3 fail_timeout=30s;如需主动健康检查与更丰富能力,可考虑 Nginx Plus。
四 进阶配置与优化
- 长连接复用:在 upstream 中配置 keepalive 32;,并在 location 中启用 proxy_http_version 1.1; proxy_set_header Connection “”;,减少 TCP/SSL 握手开销。
- 超时与缓冲:按需调整 proxy_connect_timeout、proxy_read_timeout、proxy_buffering、proxy_buffers,缓解慢后端与长响应问题。
- 日志与观测:启用访问/错误日志,使用 $upstream_response_time 记录后端耗时,便于定位瓶颈。
- HTTPS 与 HTTP/2:在 443 端口配置证书并启用 http2,对外提供加密与更高并发能力。
- 动态扩缩容:直接在 upstream 中增删 server 条目,执行 nginx -t && systemctl reload nginx 即可生效,无需重启进程。
五 常见问题与排查
- 502 Bad Gateway:多为后端未起或超时,检查后端进程与端口、放行防火墙,并适当增大 proxy_connect_timeout / proxy_read_timeout。
- IP Hash 不均:客户端经由 CDN/代理 时来源 IP 可能相同,导致热点;可改用 Cookie 会话保持 或在可信代理下使用 set_real_ip_from / real_ip_header X-Forwarded-For 获取真实 IP。
- 被动健康检查不生效:确认 max_fails / fail_timeout 已设置,且请求确实到达故障节点触发失败计数;必要时结合主动探测或外部探活。
- 配置未生效:执行 sudo nginx -t 检查语法,再 sudo systemctl reload nginx 使新配置生效。