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 环境下可能导致问题(建议关闭)。
相关推荐
酷爱码3 小时前
Nginx的核心功能--正向代理、反向代理、缓存和Rewrite
运维·nginx·缓存
筱宇***4 小时前
Mac的web服务器
mysql·nginx·macos·php
alden_ygq12 小时前
nginx 出现大量connect reset by peer
服务器·网络·nginx
大大小小聪明12 小时前
Nginx核心功能及同类产品对比
运维·nginx
*郑*14 小时前
nginx配置反向代理支持CORS跨域请求
运维·nginx
*郑*1 天前
nginx配置反向代理后端
运维·nginx
霍志杰1 天前
网址为 http://xxx:xxxx/的网页可能暂时无法连接,或者它已永久性地移动到了新网址
nginx
hnlucky1 天前
《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》
运维·数据库·nginx·云原生·容器·kubernetes·mariadb
铁锚1 天前
一个WordPress连续登录失败的问题排查
java·linux·服务器·nginx·tomcat
猴子请来的逗比4891 天前
tomcat与nginx之间实现多级代理
java·nginx·tomcat