Debian系统中Nginx性能测试与调优指南
性能测试是评估Nginx在高负载下表现的关键步骤,需选择合适的工具并明确测试场景。
sudo apt install apache2-utils;示例命令:ab -n 1000 -c 100 http://your-server-ip/(-n指定总请求数,-c指定并发数)。sudo apt install wrk;示例命令:wrk -t12 -c400 -d30s http://your-server-ip/(-t指定线程数,-c指定并发数,-d指定测试时长)。locustfile.py定义测试逻辑,通过locust -f locustfile.py启动,通过浏览器设置用户数和生成速率。调优需结合服务器硬件(CPU、内存、磁盘、网络)和应用场景(静态/动态内容比例、并发量),逐步优化配置。
worker_processes:设置为CPU核心数(auto可自动适配),充分利用CPU资源;worker_connections:每个worker进程的最大连接数,默认1024,可根据内存调整(如1GB内存可设置为1024-2048)。配置路径:/etc/nginx/nginx.conf(全局块)。keepalive_timeout 65s;(保持连接超时时间)、keepalive_requests 100;(每个连接允许的最大请求数)。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_pass http://backend;
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
}
启用Gzip压缩,减少传输数据量(尤其对文本类内容效果显著)。配置:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 5; # 压缩级别(1-9,越高压缩率越高,但CPU消耗越大)
gzip_min_length 256; # 只压缩大于256字节的文件
当单台服务器无法承载高并发时,使用Nginx作为负载均衡器,将请求分发到多台后端服务器。配置:
upstream backend {
server backend1.example.com;
server backend2.example.com;
least_conn; # 使用最少连接算法(适合长连接场景)
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection ""; # 关闭客户端与后端的keepalive,避免连接泄漏
}
}
若启用HTTPS,需优化加密配置以提高性能和安全性。配置:
ssl_protocols TLSv1.2 TLSv1.3; # 仅使用TLS 1.2及以上安全协议
ssl_ciphers HIGH:!aNULL:!MD5; # 使用高强度加密套件
ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件
ssl_session_cache shared:SSL:10m; # 会话缓存,减少SSL握手次数
ssl_session_timeout 10m; # 会话超时时间
减少不必要的日志记录,降低磁盘I/O消耗。配置:
access_log off; # 关闭访问日志(若不需要分析用户行为)
error_log /var/log/nginx/error.log crit; # 仅记录严重错误(级别:debug/info/notice/warn/error/crit)
ulimit -n 65535(临时生效),永久生效需修改/etc/security/limits.conf(添加* soft nofile 65535; * hard nofile 65535)。sysctl -w net.core.somaxconn=65535 # 监听队列最大长度
sysctl -w net.ipv4.tcp_tw_reuse=1 # 复用TIME-WAIT连接
sysctl -w net.ipv4.tcp_fin_timeout=30 # TIME-WAIT连接超时时间(秒)
```(需将配置写入`/etc/sysctl.conf`永久生效)。
nginx -t检查配置语法,nginx -s reload重新加载配置(避免重启服务导致中断),观察性能变化后再继续调整。top、htop、vmstat、iostat等工具监控CPU、内存、磁盘I/O、网络带宽使用情况,及时发现瓶颈(如CPU过高需优化代码或增加服务器,内存不足需增加内存或调整缓存策略)。