Debian Nginx 性能如何优化
小樊
42
2025-12-25 18:15:37
Debian 上 Nginx 性能优化实战指南
一 全局与事件模块优化
- 设置工作进程与文件句柄
- 将 worker_processes 设为 auto(或 CPU 核心数),充分利用多核;提升 worker_rlimit_nofile 至 65535 或更高,避免“too many open files”。
- 事件模型与连接
- Linux 使用 use epoll;开启 multi_accept on 提升高并发下的连接接收效率。
- 合理提高 worker_connections(如 16384/32768),注意系统级 ulimit -n 与内核 somaxconn 也要同步放大。
- 传输与长连接
- 启用 sendfile on 与 tcp_nopush on 提升静态文件吞吐;tcp_nodelay on 降低小包延迟。
- 开启长连接复用:keepalive_timeout 60–65s、keepalive_requests 100000;反向代理到上游时设置 upstream keepalive 300 并在 location 中使用 proxy_http_version 1.1; proxy_set_header Connection “”。
二 HTTP 与静态资源、压缩与缓存
- 压缩策略
- 建议开启 gzip on,并设置 gzip_min_length 1k、gzip_types text/plain text/css application/javascript application/json text/xml 等常用类型;启用 gzip_vary on;若已有预压缩文件可用 gzip_static on 减少 CPU 实时压缩开销。
- 静态资源缓存
- 对图片、JS、CSS 等设置长期 Cache-Control/Expires,如:
- location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control “public, immutable”; }
- 请求与缓冲
- 适度设置 client_max_body_size(如 8m/50m 视业务而定);为访问日志启用缓冲减少 I/O:access_log /var/log/nginx/access.log main buffer=16k;静态资源可关闭访问日志。
- 打开文件缓存
- 启用 open_file_cache 缓存频繁访问的文件元数据与描述符,例如:open_file_cache max=100000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 1; open_file_cache_errors on;。
三 反向代理与上游优化
- 连接复用与头部
- 与上游保持长连接:upstream { server 10.0.0.10:8080; keepalive 300; };反向代理 location 中设置 proxy_http_version 1.1; proxy_set_header Connection “”,并传递必要头信息(如 Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto)。
- 超时与缓冲
- 根据应用响应调整 fastcgi_read_timeout / proxy_read_timeout(如 300s 适用于重计算/慢 I/O 的后端);合理设置 proxy_buffering on 及缓冲相关参数以平滑突发流量。
- 负载均衡策略
- 依据业务选择 round-robin / least_conn / ip_hash 等策略,必要时为关键路径配置 权重 与 健康检查。
四 操作系统与网络内核参数
- 文件句柄与进程限制
- 提升系统级与用户级文件句柄:ulimit -n 65535;在 /etc/security/limits.conf 为运行 Nginx 的用户设置 nofile 65535 或更高。
- 网络与连接队列
- 提升 net.core.somaxconn(如 65535)与 net.ipv4.tcp_max_syn_backlog;扩大本地端口范围 net.ipv4.ip_local_port_range 1024 65535;缩短 net.ipv4.tcp_fin_timeout 30;在 NAT/高并发环境适当提高 net.nf_conntrack_max(如 2097152)。
- TIME_WAIT 优化
- 启用 net.ipv4.tcp_tw_reuse 1;在 Linux 4.12+ 避免使用已废弃的 tcp_tw_recycle;可按需调小 net.ipv4.tcp_max_tw_buckets(如 6000)控制占用。
- 其他稳定性项
- 视场景开启 net.ipv4.tcp_syncookies 1 抵御 SYN 洪泛;提升 net.core.netdev_max_backlog 与 net.core.rmem_default/wmem_default 等以适配突发流量。
五 监控、压测与逐步落地
- 监控与观测
- 部署 stub_status 暴露关键指标:Active/accepts/handled/requests、Reading/Writing/Waiting;使用 ngxtop 进行实时 Top-N 分析;结合 Prometheus + Grafana 做长期可视化监控与告警。
- 压测与验证
- 使用 ab/wrk2/siege 进行基线压测,逐步调整 worker_connections / keepalive / gzip / upstream keepalive / 内核参数,观察 P95/P99 延迟、RPS、错误率与 CPU/内存/网络 曲线,避免一次性大幅变更。
- 安全与维护
- 保持 Nginx/Debian/PHP 等组件为稳定最新版本;仅开放必要端口与服务,使用 ufw/iptables 做最小暴露;对管理接口与状态页设置 IP 白名单 与鉴权。