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重启即可验证负载均衡
相关推荐
爱喝水的鱼丶6 小时前
SAP-ABAP:接口与报表场景专项优化:RFC/ODATA 接口、ALV 报表的性能提升方案
运维·性能优化·接口·sap·abap·rfc·经验交流
画中有画7 小时前
自动化脚本开发最佳实践
运维·自动化
江南风月10 小时前
如何使用WGCLOUD实现智能运维
运维·zabbix·运维开发·prometheus
xiaoxiangsiyan10 小时前
HCIA 网络技术基础核心模块详解
运维·网络·网络协议·tcp/ip·运维开发·网络基础
MuMuMu122312 小时前
工业园区 VOCs 绿岛集中治理:越华环保集团项目技术方案与工程实践
大数据·运维
sxstj13 小时前
Ubuntu 完整安装并启用 Flatpak 教程
linux·运维·ubuntu
国际云,接待13 小时前
Nginx 后面接负载均衡,502/504 到底该先查哪里?
运维·nginx·负载均衡
刘某的Cloud14 小时前
Galera Cluster部署 mariadb 节点down机,log sequence number恢复
linux·运维·数据库·负载均衡·mariadb·集群·高可用
小此方14 小时前
Re:Linux系统篇(五十四)线程篇 · 七:互斥锁的底层实现原理:从硬件上下文、原子交换指令(Swap)到并发封装实战
linux·运维·驱动开发
二宝哥16 小时前
CentOS 7.9 离线安装 Nginx 并配置openssl1.1.1
linux·nginx·centos