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重启即可验证负载均衡
相关推荐
Land03291 小时前
指纹浏览器自动化集成方案|多浏览器RPA适配实战记录
运维·人工智能·爬虫·python·selenium·自动化·rpa
霍格沃兹测试学院-小舟畅学2 小时前
浏览器自动化的下一层:为什么 CloakBrowser 把指纹问题推到了源码层?
运维·自动化
YuanDaima20482 小时前
Docker 核心架构与底层技术原理解析
运维·人工智能·docker·微服务·容器·架构·个人开发
weixin_417257062 小时前
ubuntu系统-dify-相关文件配置
linux·运维·ubuntu
浓黑的daidai2 小时前
day-02
linux·运维·elk
sbjdhjd2 小时前
02(上)| K8s 资源管理全流程:命令、配置、生产避坑
linux·运维·云原生·kubernetes·云计算·podman·kubelet
MXsoft6183 小时前
**365****天零宕机背后:高可用业务系统的监控设计逻辑**** **
运维
刃神太酷啦3 小时前
《网络基础全链路深度解析:从Socket编程到HTTPS与TCP/UDP内核机制》----《Hello Linux!》(25)
linux·运维·c语言·网络·c++·tcp/ip·https
IT大白鼠3 小时前
Linux系统安全及应用:技术配置与检测实战
linux·运维·系统安全