Nginx的访问日志是分析网站流量、排查问题和优化性能的重要工具。下面我将详细介绍如何配置和分析Nginx的HTTP请求日志。
在nginx.conf中通常可以找到如下配置:
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
}
$remote_addr
:客户端IP地址$remote_user
:HTTP基本认证的用户名$time_local
:本地时间$request
:完整的请求行(方法、URI、协议)$status
:HTTP状态码$body_bytes_sent
:发送给客户端的字节数$http_referer
:引用来源$http_user_agent
:客户端浏览器信息可以根据需要添加更多字段:
log_format extended '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time $upstream_addr';
# 查看访问量最高的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
# 查看最频繁的请求URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -n 10
# 统计HTTP状态码
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 统计慢请求(假设自定义了$request_time)
awk '{if ($NF > 1) print $0}' access.log | sort -k10 -nr | head -n 20
# 统计特定时间段的请求
awk '/\[02\/May\/2023:09:00/,/\[02\/May\/2023:10:00/' access.log | wc -l
实时日志分析工具:
goaccess /var/log/nginx/access.log -a
功能全面的日志分析工具,提供Web界面。
适用于大规模日志分析。
$request_time > 1s
$upstream_response_time
$body_bytes_sent
为防止日志文件过大,应配置日志轮转:
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
使用tail -f
实时查看日志:
tail -f /var/log/nginx/access.log
或使用多工具组合:
tail -f /var/log/nginx/access.log | grep --line-buffered 'some_pattern' | awk '{print $1}'
通过合理配置和分析Nginx日志,您可以深入了解网站的运行状况,及时发现并解决问题,优化用户体验。