微信公众号
扫描关注微信公众号
博客大厅

Nginx如何扛住高并发下百万级请求?

原创 来源:博客站 阅读 0 03月04日 19:27 听全文

要让Nginx在高并发场景下支撑百万级请求,需要从架构设计、系统调优、Nginx配置三个层面综合优化。以下是一个系统性解决方案:

一、架构设计优化

  1. 分布式集群架构

    • 部署Nginx集群,通过DNS轮询或L4负载均衡器(如LVS、F5)分散流量
    • 使用Keepalived实现高可用,避免单点故障
  2. 动静分离

    location ~* .(js|css|png|jpg|gif|ico)$ {
        expires 30d;
        access_log off;
        add_header Cache-Control "public";
        root /static;
    }
    
    • 静态资源使用CDN加速,动态请求反向代理到后端应用服务器
  3. 多级缓存体系

    • 客户端缓存(浏览器缓存)
    • Nginx代理缓存:
      proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
      proxy_cache_key "$scheme$request_method$host$request_uri";
      
  4. 异步化架构

    • 后端服务采用异步非阻塞框架(如Node.js、Go)
    • 使用消息队列(Kafka/RabbitMQ)解耦耗时操作

二、系统层优化

  1. 内核参数调优

    # 最大文件描述符
    fs.file-max = 1000000
    
    # TCP连接复用
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    
    # 队列设置
    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 65535
    
  2. 资源限制调整

    ulimit -n 1000000  # 文件描述符
    sysctl -w net.ipv4.ip_local_port_range="1024 65535"  # 端口范围
    
  3. CPU亲和性绑定

    worker_processes auto;
    worker_cpu_affinity auto;
    

三、Nginx核心配置优化

  1. 基础配置优化

    worker_processes auto;  # 自动匹配CPU核心数
    worker_rlimit_nofile 100000;  # worker进程文件描述符
    
    events {
        worker_connections 10240;  # 单个worker连接数
        use epoll;  # Linux使用epoll模型
        multi_accept on;
    }
    
    http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        keepalive_requests 10000;  # 单个连接最大请求数
    }
    
  2. 连接池优化

    upstream backend {
        server 10.0.0.1:8080;
        server 10.0.0.2:8080;
        
        keepalive 500;  # 连接池大小
        keepalive_timeout 60s;
    }
    
  3. 流量控制

    limit_req_zone $binary_remote_addr zone=api:10m rate=100r/s;
    
    location /api/ {
        limit_req zone=api burst=200 nodelay;
        proxy_pass http://backend;
    }
    
  4. 日志优化

    access_log off;  # 关闭非必要日志
    log_format compressed '$remote_addr - $request_time';
    

四、进阶优化手段

  1. 协议优化

    • 启用HTTP/2(需OpenSSL 1.0.2+)
      listen 443 ssl http2;
      
  2. 硬件加速

    • 启用SSL硬件加速卡
    • 使用支持DPDK的版本(如Nginx-Plus)
  3. 动态模块

    • 使用Lua模块实现动态逻辑
    • 安装第三方模块:headers-more-nginx-module
  4. 监控预警

    # 实时监控工具
    ngx_http_stub_status_module
    nginx-module-vts
    

五、压测验证

使用压测工具验证优化效果:

wrk -t12 -c4000 -d30s --latency https://yourdomain.com
# 参数说明:
# -t 线程数(建议等于CPU核心数)
# -c 并发连接数
# -d 测试时长

六、典型百万QPS架构示例

客户端 -> CDN -> LVS集群 -> Nginx集群(100+节点)-> 应用服务器集群 -> 缓存/DB
       │                   │                  │
       └── 全局负载均衡     └── 区域负载        └── 服务发现

通过以上优化组合,实际生产环境中Nginx可以支撑:

  • 单机:2-5万QPS(取决于硬件配置)
  • 集群:百万级QPS(需配合分布式架构)

关键点在于:减少系统调用、降低上下文切换、最大化利用硬件资源、避免雪崩效应。建议每次优化后通过压测验证效果,逐步迭代升级。

学在每日,进无止境!更多精彩内容请关注微信公众号。
原文出处: 内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/484.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。
>