nginx的负载均衡主要通过upstream模块来实现

nginx的负载均衡策略如下:

策略 配置 适用场景
轮询 (默认) 无需额外配置 服务器性能相近
权重 weight=3 服务器性能差异大
IP哈希 ip_hash 需要会话保持
最少连接 least_conn 请求处理时长不均
响应时间 (商业版) least_time Nginx Plus

对于各种策略模式的简单示例配置

权重配置示例
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哈希(会话保持)
upstream backend_servers {
    ip_hash;  # 同一IP固定分配到同一台服务器
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}
健康检查与容错
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:仅当所有主服务器故障时才启用
}
有个进阶用法如下,可以起到按模块功能来做不同的负载
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模块下,即:

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文件中输入按自己需求调整好的配置内容,以下为我当前使用的示例配置,是一个本地多节点负载的配置示例:
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重启即可验证负载均衡
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐