分享大阪服务器 Nginx 性能优化实战,通过配置调优支撑 10 万 QPS。
Nginx 是高性能 Web 服务器和反向代理。本文分享大阪服务器 Nginx 优化到 10 万 QPS 的实战。
基础优化 1) worker_processes:设为 CPU 核心数(auto) 2) worker_connections:每个 worker 的连接数,10240+ 3) use epoll:高效事件模型 4) multi_accept on:一次接受多个连接 5) sendfile on:零拷贝传输 6) tcp_nopush on:减少网络包 7) tcp_nodelay on:减少延迟
连接优化 1) keepalive_timeout:65s,复用连接 2) keepalive_requests:1000,单连接最大请求数 3) reset_timedout_connection on:及时释放超时连接 4) client_body_timeout / client_header_timeout:10s 5) send_timeout:10s
压缩优化 1) gzip on:开启压缩 2) gzip_types:text/css、application/javascript、application/json 3) gzip_min_length:1k,小文件不压缩 4) gzip_comp_level:6,压缩率和 CPU 平衡 5) gzip_vary on:添加 Vary 头
缓存优化 1) open_file_cache:缓存文件句柄 2) open_file_cache_valid:60s 验证 3) proxy_cache:反向代理缓存 4) fastcgi_cache:PHP 缓存 5) 静态资源:设置长缓存(1 年)
反向代理优化 1) proxy_http_version 1.1:HTTP/1.1 复用连接 2) proxy_set_header Connection "":保持连接 3) proxy_buffers:16 16k,缓冲后端响应 4) proxy_connect_timeout:5s 5) proxy_read_timeout / proxy_send_timeout:30s
内核优化 ``` net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 1024 65535 fs.file-max = 1000000 ```
静态资源优化 1) 图片用 WebP/AVIF 2) JS/CSS 合并压缩 3) 字体文件预加载 4) 浏览器缓存(Cache-Control) 5) CDN 分发
SSL 优化 1) http2:启用 HTTP/2 2) ssl_protocols:TLS 1.2/1.3 3) ssl_session_cache:缓存 SSL 会话 4) ssl_session_timeout:10m 5) OCSP stapling:减少证书验证时间
性能测试 1) ab -n 100000 -c 100 http://localhost/ 2) wrk -t 16 -c 1000 -d 30s http://localhost/ 3) 监控:QPS、延迟、错误率、CPU、内存
常见问题 问题一:连接数不够 表现:too many open files。 修复:调大 worker_connections、fs.file-max、ulimit。
问题二:CPU 跑满 表现:单核 CPU 100%。 修复:worker_processes 设为核心数;开启 gzip 但不要太高等级。
问题三:内存不足 表现:OOM。 修复:减少 proxy_buffer;限制连接数。
问题四:后端超时 表现:502/504。 修复:调大 proxy_read_timeout;优化后端。
效果对比 | 指标 | 优化前 | 优化后 | | --- | --- | --- | | QPS | 5000 | 100000 | | 延迟 | 200ms | 15ms | | 错误率 | 2% | 0.1% | | CPU 利用率 | 95% | 60% |
总结:Nginx 优化要从配置、内核、缓存、压缩多方面入手。10 万 QPS 需要合理的配置和足够的硬件资源。