网站日志的默认位置
在 CentOS 上,最常见的 Web 服务器是 Apache (httpd) 和 Nginx,它们的日志默认存储在不同的位置。

A. Apache (httpd) 日志
Apache 的日志文件通常位于 /var/log/httpd/ 目录下。
- 访问日志: 记录了所有对网站的请求。
- 路径:
/var/log/httpd/access_log - 有时也可能是
access_log_ssl或按虚拟主机命名的日志,如example.com_access_log。
- 路径:
- 错误日志: 记录了服务器运行中遇到的错误和警告信息。
- 路径:
/var/log/httpd/error_log
- 路径:
示例:
# 查看 Apache 访问日志 tail -f /var/log/httpd/access_log # 查看 Apache 错误日志 tail -f /var/log/httpd/error_log
B. Nginx 日志
Nginx 的日志文件通常位于 /var/log/nginx/ 目录下。
- 访问日志: 记录了所有对网站的请求。
- 路径:
/var/log/nginx/access.log - 同样,也可能有按虚拟主机命名的日志,如
example.com.access.log。
- 路径:
- 错误日志: 记录了服务器运行中遇到的错误和警告信息。
- 路径:
/var/log/nginx/error.log
- 路径:
示例:

# 查看 Nginx 访问日志 tail -f /var/log/nginx/access.log # 查看 Nginx 错误日志 tail -f /var/log/nginx/error.log
查看和分析日志
查看日志是排查问题、了解网站访问情况的基础。
A. 基本查看命令
-
cat: 显示整个文件内容(对于大日志文件不推荐)。cat /var/log/httpd/access_log
-
less: 分页显示文件内容,适合查看大文件,按q退出。less /var/log/httpd/access_log
-
more: 类似less,但功能较少。
(图片来源网络,侵删) -
head: 显示文件开头几行(默认10行)。head -n 50 /var/log/nginx/access.log
-
tail: 显示文件末尾几行(默认10行)。这是最常用的命令!# 查看最新的100行日志 tail -n 100 /var/log/httpd/access_log # 实时跟踪日志文件的更新(排查实时问题的利器) tail -f /var/log/httpd/access_log
-
grep: 过滤日志,只显示包含特定关键词的行。# 查找所有包含 "404" (Not Found) 错误的访问记录 grep " 404 " /var/log/nginx/access.log # 查找来自特定IP地址的访问 grep "192.168.1.100" /var/log/httpd/access_log # 查找所有搜索引擎蜘蛛的访问 grep -i "googlebot\|bingbot" /var/log/nginx/access.log
B. 高级分析工具
手动 grep 效率不高,推荐使用专业的日志分析工具。
-
GoAccess: 非常流行的实时日志分析器,可以生成美观的 HTML 报告。
-
安装:
# CentOS 7/8 yum install goaccess -y # CentOS Stream/RHEL 9 dnf install goaccess -y
-
运行分析:
# 分析 Nginx 访问日志并生成 HTML 报告 goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html # 分析 Apache 访问日志 goaccess /var/log/httpd/access_log -o /var/www/html/report.html --real-time-html
运行后,访问你服务器上的
http://your_server_ip/report.html即可看到实时更新的分析报告。
-
-
AWStats: 另一个功能强大的日志分析工具,生成静态报告。
- 安装:
yum install awstats -y
- 配置: 需要为每个网站配置一个
.conf文件,通常在/etc/awstats/目录下,配置文件需要修改LogFile,SiteDomain,HostAlias等参数。 - 生成报告:
# 为 example.com 网站生成昨天的报告 awstats -config=example.com -update
报告通常生成在
/var/www/awstats/目录下。
- 安装:
日志切割与轮转
网站日志会不断增长,如果不加以管理,很快就会占满整个磁盘空间,日志切割(也称为日志轮转)就是将旧日志重命名并创建一个新的空日志文件,同时可以删除过期的旧日志。
A. 手动切割日志(不推荐,仅作演示)
以 Nginx 为例:
# 1. 重命名当前日志文件 mv /var/log/nginx/access.log /var/log/nginx/access.log.20251027 # 2. 向 Nginx 主进程发送 USR1 信号,让它重新打开日志文件,生成一个新的 access.log kill -USR1 $(cat /var/run/nginx.pid) # 3. (可选) 压缩旧的日志文件以节省空间 gzip /var/log/nginx/access.log.20251027
这个过程繁琐且容易出错,强烈建议使用自动化工具。
B. 使用 logrotate 自动化(推荐)
CentOS 系统自带了 logrotate 工具,它是一个强大的日志管理工具,可以自动完成日志的轮转、压缩和删除。
工作原理:
logrotate 通常由 cron 每天执行一次,它会检查 /etc/logrotate.d/ 目录下的配置文件,并根据配置来管理日志。
Nginx 日志轮转配置示例:
创建一个配置文件 /etc/logrotate.d/nginx:
vim /etc/logrotate.d/nginx
```如下:
```bash
/var/log/nginx/*.log {
daily # 每天轮转一次
missingok # 如果日志文件不存在,不报错
rotate 7 # 保留7份旧日志
compress # 轮转后进行压缩,以 .gz
delaycompress # 延迟一天再压缩,这样可以方便排查刚刚轮转的日志
notifempty # 如果日志为空,则不进行轮转
create 640 nginx nginx # 新建的日志文件权限为 640,所有者为 nginx,组为 nginx
postrotate
# 轮转后,向 Nginx 发送信号,让它重新打开日志文件
# 这里的命令路径需要根据你的系统调整
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Apache (httpd) 日志轮转配置示例:
httpd 软件包通常会自带一个配置文件 /etc/logrotate.d/httpd通常如下:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service >/dev/null 2>&1 || true
endscript
}
这个配置会每天轮转日志,保留最近几份,并在轮转后使用 systemctl reload httpd 命令让 Apache 重新加载日志。
你可以通过 man logrotate 查看更详细的配置选项。
日志清理与归档
对于非常旧的日志,通常不需要保留在本地,可以采取以下策略:
- 本地压缩归档:
logrotate的compress选项已经做了这一步。 - 移动到备份盘: 可以编写一个
cron任务,将超过一定时间的日志(如.gz文件)移动到另一个大容量的存储设备中。 - 上传到远程服务器/云存储 (推荐): 这是最安全、最可靠的方式,可以编写脚本,使用
rsync,scp或云厂商提供的 CLI 工具(如aws s3 cp)将日志定期上传到远程服务器或对象存储(如 Amazon S3, 阿里云 OSS)。
示例 cron 任务 (每天凌晨2点执行):
编辑 crontab: crontab -e
# 每天凌晨2点,将30天前的Nginx压缩日志上传到S3
0 2 * * * /usr/bin/find /var/log/nginx/ -name "*.log.*.gz" -mtime +30 -exec aws s3 cp {} s3://my-backup-bucket/nginx-logs/ \;
这个命令会找到 /var/log/nginx 目录下所有超过30天的压缩日志,并上传到 S3 的 my-backup-bucket/nginx-logs/ 目录中。
| 任务 | 工具/方法 | 命令/配置 |
|---|---|---|
| 查找日志位置 | 文件系统知识 | /var/log/httpd/ (Apache)/var/log/nginx/ (Nginx) |
| 实时查看日志 | tail |
tail -f /var/log/nginx/access.log |
| 过滤日志内容 | grep |
grep " 404 " /var/log/httpd/access_log |
| 生成分析报告 | GoAccess, AWStats | goaccess access.log -o report.html |
| 自动轮转日志 | logrotate |
配置文件在 /etc/logrotate.d/ |
| 清理旧日志 | find, cron, 云存储 |
find /var/log/ -name "*.log.*" -mtime +30 -delete |
掌握这些技能,你就能有效地管理和分析 CentOS 上的网站日志,无论是排查故障还是优化网站性能都将得心应手。
