Nginx 性能优化指南

一、核心配置优化

1. worker_processes
  • 作用:定义 Nginx 工作进程数量,直接影响 CPU 资源利用率。

  • 配置原则

    • 默认值:auto(自动匹配 CPU 核心数)。
    • CPU 密集型场景(如动态计算):worker_processes = CPU核心数
    • I/O 密集型场景(如静态文件服务器):可设置为 CPU核心数 * 1.5~2
  • 示例

    nginx 复制代码
    worker_processes auto;  # 自动检测 CPU 核心数(推荐)
2. worker_connections
  • 作用:单个工作进程的最大并发连接数。

  • 公式最大并发 = worker_processes * worker_connections

  • 配置原则

    • 受限于系统文件描述符(ulimit -n)。
    • 反向代理场景需乘以 2(客户端 + 后端连接)。
  • 示例

    nginx 复制代码
    events {
      worker_connections 10240;  # 单进程支持 10K 连接
      multi_accept on;           # 一次性接受所有新连接
      use epoll;                 # Linux 高性能事件模型
    }

二、内核参数优化

1. 文件描述符限制
  • 系统级fs.file-max

    bash 复制代码
    # /etc/sysctl.conf
    fs.file-max = 1000000
  • 用户级nofile(Nginx 进程限制)

    bash 复制代码
    # /etc/security/limits.conf
    nginx soft nofile 65535
    nginx hard nofile 65535
2. 连接队列优化
  • net.core.somaxconn:全连接队列最大值(默认 128,建议 1024+)

  • net.ipv4.tcp_max_syn_backlog :半连接队列最大值(建议 2048)

    bash 复制代码
    # /etc/sysctl.conf
    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 65535
    net.ipv4.tcp_syncookies = 1             # 防 SYN Flood
    net.ipv4.tcp_tw_reuse = 1              # 快速回收 TIME_WAIT 连接
3. 应用内核参数
bash 复制代码
sysctl -p

三、多业务场景优化案例

场景 1:静态资源服务器
  • 特点:高并发、小文件传输。

  • 配置

    nginx 复制代码
    worker_processes auto;
    events {
      worker_connections 16384;
      use epoll;
    }
    http {
      sendfile on;       # 零拷贝技术
      tcp_nopush on;     # 合并数据包
      aio on;            # 异步 I/O(大文件适用)
    }
场景 2:反向代理服务器
  • 特点:处理前后端连接,需高吞吐。

  • 配置

    nginx 复制代码
    worker_processes 8;  # 8核 CPU
    events {
      worker_connections 8192;
    }
    http {
      upstream backend {
        keepalive 64;    # 复用后端连接
        server 10.0.0.1:80;
      }
      server {
        location / {
          proxy_http_version 1.1;
          proxy_set_header Connection "";
        }
      }
    }
场景 3:高并发 Web 应用
  • 特点:频繁动态请求,需低延迟。

  • 配置

    nginx 复制代码
    worker_processes 4;
    events {
      worker_connections 4096;
    }
    http {
      keepalive_timeout 15;  # 减少连接重建开销
      gzip on;               # 压缩响应
      fastcgi_buffer_size 64k;  # 避免缓冲区溢出
    }
场景 4:负载均衡器(TCP 层)
  • 特点:四层转发,处理海量连接。

  • 配置

    nginx 复制代码
    worker_processes auto;
    events {
      worker_connections 32768;
    }
    stream {
      upstream tcp_backend {
        server 10.0.0.2:3306;  # MySQL 集群
      }
      server {
        listen 3306;
        proxy_pass tcp_backend;
        proxy_connect_timeout 1s;
      }
    }

四、验证与监控

  1. 测试工具

    • 压力测试:wrk -t4 -c1000 -d30s http://example.com
    • 连接数监控:ss -snetstat -ant | grep ESTABLISHED | wc -l
  2. Nginx 状态模块

    nginx 复制代码
    server {
      location /nginx_status {
        stub_status on;
        access_log off;
      }
    }
    • 输出示例:Active connections: 234(实时连接数)
  3. 系统监控

    • top(CPU 利用率)
    • free -h(内存占用)
    • cat /proc/sys/fs/file-nr(已用文件描述符)

五、注意事项

  • 逐步调优:避免一次性调整过多参数,通过灰度测试观察效果。
  • 硬件瓶颈:SSD 磁盘、万兆网卡可能比软件优化更有效。
  • 安全平衡net.ipv4.tcp_tw_recycle 在 NAT 环境下可能导致问题(建议关闭)。
相关推荐
Evan芙10 小时前
搭建nexus服务,实现本地仓库、代理仓库
java·nginx·tomcat
秋田君12 小时前
前端工程化部署入门:Windows + Nginx 实现多项目独立托管与跨域解决方案
前端·windows·nginx
Evan芙13 小时前
nginx核心配置总结,并实现nginx多虚拟主机
运维·数据库·nginx
邂逅星河浪漫15 小时前
【域名解析+反向代理】配置与实现(步骤)-SwitchHosts-Nginx
linux·nginx·反向代理·域名解析·switchhosts
sg_knight15 小时前
Nuxt 4 生产环境部署指南 (Node.js + Nginx)
运维·nginx·node.js·nuxt·ssr
中年程序员一枚19 小时前
Nginx配置运行python的uvicorn项目
chrome·python·nginx
苹果醋320 小时前
Java设计模式实战:从面向对象原则到架构设计的最佳实践
java·运维·spring boot·mysql·nginx
元气满满-樱21 小时前
Nginx负载均衡
运维·nginx·负载均衡
原神启动11 天前
Nginx云计算大数据——安装AND版本升级(普通升级+平滑升级+失败回滚)
大数据·nginx·云计算
那你能帮帮我吗2 天前
nginx路径相关配置汇总
nginx