温馨提示×

Debian上Nginx如何进行性能调优

小樊
41
2025-12-29 16:00:52
栏目: 智能运维

Debian 上 Nginx 性能调优实战指南

一 基线评估与压测

  • 明确业务目标:并发连接数、每秒请求数(RPS)、P95/P99 延迟、允许的带宽与 CPU/内存上限。
  • 建立可复现的压测脚本:使用 ab、wrk、k6 或 hey,逐步提升并发,观察吞吐、错误率与延迟拐点。
  • 基线记录:在调整前后记录关键指标(RPS、P95、CPU、内存、I/O、连接数),每次只变更一个变量,便于定位收益来源。
  • 示例(ab):ab -n 10000 -c 200 http://your_server_ip/,根据结果调大并发或优化瓶颈点。

二 Nginx 核心配置优化

  • 进程与连接
    • 设置工作进程数与文件描述符:worker_processes auto; worker_rlimit_nofile 65535;
    • 提升单进程并发:events { worker_connections 16384; multi_accept on; use epoll; }
  • 传输与协议
    • 启用高效传输:sendfile on; tcp_nopush on; tcp_nodelay on;
    • 开启长连接复用:keepalive_timeout 65; keepalive_requests 100000;
    • 启用 HTTP/2:listen 443 ssl http2;
  • 压缩与内容
    • 启用 Gzip(适度压缩):gzip on; gzip_min_length 1k; gzip_comp_level 2-5; gzip_types text/plain text/css application/javascript application/json text/xml application/xml+rss text/javascript;
    • 静态资源缓存:location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control “public, no-transform”; }
  • 反向代理与缓存
    • 代理缓存示例:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; 在 location 中使用 proxy_cache my_cache; 并设置 proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
  • 超时与缓冲
    • 合理超时:client_body_timeout 10s; client_header_timeout 10s; send_timeout 15s;
    • 缓冲与上传:client_body_buffer_size 16k; client_header_buffer_size 1k; large_client_header_buffers 4 4k; client_max_body_size 50M;
  • 安全与观测
    • 隐藏版本:server_tokens off;
    • 访问日志缓冲:access_log /var/log/nginx/access.log combined buffer=32k flush=300s; error_log /var/log/nginx/error.log warn;
  • 动态内容(PHP-FPM)
    • 使用 Unix Socket、合理进程池与超时;启用 OPcache:opcache.enable=1; opcache.memory_consumption=256; opcache.max_accelerated_files=10000; opcache.jit=on; opcache.jit_buffer_size=128M。

三 系统与内核参数调优

  • 文件描述符与内核限制
    • /etc/security/limits.conf:* soft nofile 65535; * hard nofile 65535;
    • /etc/sysctl.conf:fs.file-max = 65536; net.core.somaxconn = 4096(或更高); net.ipv4.tcp_max_syn_backlog = 4096; net.ipv4.ip_local_port_range = 1024 65535; net.ipv4.tcp_tw_reuse = 1; net.ipv4.tcp_fin_timeout = 30; net.ipv4.tcp_keepalive_time = 120; net.ipv4.tcp_syncookies = 1; net.core.netdev_max_backlog = 65535;
    • 应用:sysctl -p
  • 可选:降低换页倾向(内存充足时)vm.swappiness = 10
  • 说明:上述参数需结合实例规格与业务特性逐步放大,避免一次性设置过大。

四 部署与维护流程

  • 配置校验与热加载:nginx -t && nginx -s reload(或 systemctl reload nginx),变更前务必校验语法。
  • 证书与 HTTP/2:使用 Certbot 获取免费证书并自动配置 Nginx:sudo apt install certbot python3-certbot-nginx; sudo certbot --nginx -d yourdomain.com(确保 listen 443 ssl http2; 已启用)。
  • 监控与日志分析
    • 实时观测:top/htop、vmstat、ss -s、netstat -s;Nginx 内置指标($request_time、$upstream_response_time)。
    • 日志分析:goaccess、ngxtop,定位慢请求与异常状态码。

五 关键参数建议表

参数 建议值或范围 适用场景与说明
worker_processes auto(或 CPU 核心数) 充分利用多核,避免超线程过度分配
worker_connections 16384(视 ulimit 与内存) 提升单进程并发能力
worker_rlimit_nofile 65535 避免“too many open files”
use epoll / multi_accept epoll; multi_accept on Linux 高并发必备
sendfile / tcp_nopush / tcp_nodelay on / on / on 静态文件高效传输、减少小包延迟
keepalive_timeout / keepalive_requests 65 / 100000 长连接复用,降低握手开销
gzip_comp_level 2–5 压缩率与 CPU 的折中
client_max_body_size 8–50M(按业务) 上传场景适当放大
proxy_cache_path levels=1:2 keys_zone=… max_size=… inactive=… 反向代理缓存命中率与容量平衡
net.core.somaxconn / tcp_max_syn_backlog 4096 或更高 提升连接队列,缓解突发
vm.swappiness 10 内存充裕时减少换页,提升稳定性

0