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 -s 或 netstat -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 环境下可能导致问题(建议关闭)。
相关推荐
Lvan的前端笔记19 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
姜鱼问生19 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Joy T1 天前
从 Nginx 到 Gateway 再到微服务:一次 AI 请求的完整链路
nginx·微服务·gateway·controller·路由转发·ai service·接口错误排查
小匠石钧知1 天前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
百度一下吧2 天前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JAVA面经实录9172 天前
Java高级后端 · 全套面试通关手册(Nginx)
java·nginx·面试
lpfasd1234 天前
WinSW在Win7上失败真相-实测与修复
windows·nginx
lpfasd1234 天前
nginx服务化五套方案原理解剖与选型
运维·nginx
ue星空4 天前
ALS V4 中文拆解手册
运维·nginx
吴声子夜歌5 天前
Nginx应用与运维——Nginx集群负载与配置管理(二)
运维·nginx