Nginx性能优化实战:连接控制与缓存压缩技巧
Nginx性能优化实战:从连接控制到缓存压缩
Nginx作为高性能Web服务器,其性能优化能力直接影响服务质量和资源利用率。本文将深入探讨Nginx性能优化的核心策略,包括连接控制、缓存机制、压缩传输等关键技术点。
一、连接与请求控制优化
1. 工作进程配置
worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 100000; # 每个worker能打开的文件描述符上限
实践建议:
worker_processes
通常设置为CPU核心数(可通过auto
自动检测)- 结合
worker_connections
计算最大并发连接数:max_clients = worker_processes * worker_connections
2. 连接管理优化
events {
worker_connections 10240; # 单个worker最大连接数
use epoll; # Linux下高性能事件模型
multi_accept on; # 一次accept多个连接
}
关键参数:
keepalive_timeout 65s
:长连接超时时间keepalive_requests 100
:单个长连接最大请求数sendfile on
:启用零拷贝文件传输
二、缓存机制深度优化
1. 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
access_log off;
}
2. 代理缓存配置
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m
inactive=60m use_temp_path=off max_size=1g;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating;
}
}
缓存策略对比:
策略 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
本地缓存 | 静态资源 | 响应快 | 占用磁盘 |
代理缓存 | 动态内容 | 减轻后端压力 | 需要缓存失效机制 |
三、压缩与缓冲优化
1. Gzip压缩配置
gzip on;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript;
gzip_vary on;
2. 响应缓冲优化
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
调优建议:
- 小文件(<4K)禁用缓冲:
proxy_buffering off
- 大文件上传需要调整
client_body_buffer_size
四、TCP/UDP协议层优化
http {
tcp_nopush on; # 合并数据包再发送
tcp_nodelay on; # 禁用Nagle算法
reset_timedout_connection on;
# TCP快速打开
listen 443 ssl fastopen=3;
}
内核参数建议:
# 增加TCP连接队列
sysctl -w net.core.somaxconn=65535
# 加快TIME_WAIT回收
sysctl -w net.ipv4.tcp_tw_reuse=1
五、性能优化检查清单
连接检查:
ss -s
查看连接状态netstat -ant | awk '{print $6}' | sort | uniq -c
统计连接状态
性能测试:
# 压测工具示例 ab -n 100000 -c 1000 http://example.com/ wrk -t12 -c400 -d30s http://example.com/
- 监控指标:
六、最佳实践总结
静态内容:
- 启用sendfile+directio组合
- 设置长期缓存头
动态内容:
- 合理设置proxy缓存
- 启用gzip压缩
高并发场景:
- 调整系统文件描述符限制
- 优化TCP栈参数
调试技巧:
# 实时监控 ngxtop -c /etc/nginx/nginx.conf # 内存分析 gdb -p `cat /var/run/nginx.pid` -ex "source ngx.dict" -batch
通过以上优化手段,Nginx可轻松支撑万级QPS的请求量。建议根据实际业务场景进行参数调优,并通过持续监控验证优化效果。