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重启即可验证负载均衡
相关推荐
码农学院2 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
大耳朵-小飞象10 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技11 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
生活爱好者!14 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
壮哥_icon16 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi16 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_1800790524717 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式