要识别慢查询,需先配置Nginx记录请求处理时间。通过自定义日志格式添加$request_time(请求处理时间)、$upstream_response_time(上游服务器响应时间)等关键字段,并设置慢查询阈值筛选慢请求。
http块中定义包含响应时间的格式,例如:log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$request_time" "$upstream_response_time"';
server或location块中引用该格式,例如:access_log /var/log/nginx/access.log main;
if条件筛选超过阈值的请求(如1秒),写入单独的慢日志文件:access_log /var/log/nginx/slow.log main if=$request_time gt 1000; # 单位:毫秒
或使用Nginx官方ngx_http_slowlog_module模块(需编译时启用),直接配置慢日志路径和阈值:slowlog_path /var/log/nginx/slow.log;
slowlog_timeout 1s; # 超过1秒的请求记录到slow.log
以上配置需修改nginx.conf后重启Nginx生效。通过工具分析慢日志,快速找出耗时高的请求、URL或客户端,为优化提供依据。
awk筛选慢请求,例如获取响应时间Top10的请求:awk '{if ($9 > 1) print $1, $7, $9}' /var/log/nginx/slow.log | sort -k3 -rn | head -10
其中$9为$request_time(需根据实际日志格式调整),1为阈值(秒)。sudo goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
top命令的实时监控工具,查看当前慢请求。安装后运行:pip install ngxtop
ngxtop -c /etc/nginx/nginx.conf -t 1
慢查询的根本原因可能是Nginx配置不合理或资源不足,需通过以下方式优化:
worker_processes设置为CPU核心数(如worker_processes 4;),充分利用多核性能;增加worker_connections(如worker_connections 1024;),提高单个进程的并发处理能力。http2指令启用多路复用,减少连接开销,提升页面加载速度。ssl_ciphers HIGH:!aNULL:!MD5;),减少SSL握手时间。gzip on;压缩响应数据,减少传输时间(尤其对文本资源如HTML、CSS)。expires指令(如expires 30d;),减少重复请求的处理时间;对反向代理的后端响应启用proxy_cache,缓存常用内容。持续监控Nginx性能,及时发现慢查询趋势,避免影响用户体验。
top、htop、vmstat等工具监控CPU、内存、磁盘I/O使用率,确保硬件资源充足;调整系统参数(如ulimit -n增加文件描述符限制),适应高并发需求。logrotate工具定期切割日志(如每天切割,保留7天),避免日志文件过大占用磁盘空间。编辑/etc/logrotate.d/nginx:/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 www-data adm
}
以上配置可实现日志的自动切割、压缩和清理。通过以上步骤,可有效优化Debian Nginx日志中的慢查询,提升服务器性能和用户体验。