nginx之负载均衡

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重启即可验证负载均衡
相关推荐
似水এ᭄往昔1 小时前
【Linux系统编程】--进程概念
linux·运维·服务器
Dxy12393102161 小时前
Linux 如何关闭关不掉的进程
linux·运维·chrome
小徐敲java1 小时前
Linux读取串口实时数据
linux·运维·服务器
辰_砂2 小时前
国产服务器操作系统编译nginx生成rpm包
运维·nginx
YOLO数据集集合2 小时前
配电站智能运维|变电一次设备识别|高压电气构件目标检测数据集|电力巡检
运维·人工智能·深度学习·yolo·目标检测·视觉检测
keyipatience2 小时前
25.Linux静态动态库全解析
linux·运维·服务器
开开心心_Every3 小时前
多连接方式的屏幕共享工具推荐
运维·服务器·pdf·电脑·excel·tornado·dash
Chris-zz3 小时前
Linux:线程概念与控制
linux·运维
剑神一笑4 小时前
Linux chown 命令详解:从 inode 到实战
linux·运维·服务器
学代码的真由酱4 小时前
Docker基础
运维·docker·容器