温馨提示×

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 使新配置生效。

0