在配置长期留存之前,必须确保日志记录的格式包含足够的信息以满足政务合规性要求(如访问者IP、具体时间、请求URI、状态码等)。默认的Nginx配置可能缺少部分关键审计字段。
登录宝塔面板,进入【软件商店】,找到已安装的Nginx,点击【设置】 -> 【配置修改】。在 http 块中找到或添加 log_format。
为了确保日志可追溯性,请使用以下标准配置替换原有的 log_format。该格式记录了真实IP、请求时间、请求行、状态码、请求体大小、引用页、User-Agent以及请求处理时间。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time';
修改完成后,点击【保存】。随后检查各个网站的配置文件,确保 access_log 引用了该格式。进入【网站】目录,选择目标站点,点击【设置】 -> 【配置文件】,确认日志行如下:
access_log /www/wwwlogs/your_domain.log main;
注意:政务项目通常要求记录真实IP,请确保你的反向代理(如负载均衡或CDN)正确传递了 X-Forwarded-For 头部,并在Nginx中获取到了该变量。
Linux系统自带 logrotate 工具,这是管理日志轮转的标准方案。宝塔面板默认也使用了此工具,但默认配置可能保留天数过短。我们需要手动创建一个专属的政务日志轮转策略,防止日志无限增大导致磁盘爆满,同时实现本地短期留存。
使用SSH工具连接服务器,或者直接在宝塔面板的【终端】中执行以下命令,创建一个新的配置文件:
vim /etc/logrotate.d/gov_logs
按 i 键进入编辑模式,粘贴以下配置。这套策略的含义是:每天轮转一次、保留最近30天的日志在原目录(方便快速排查)、轮转后进行压缩、使用日期作为后缀、如果日志文件不存在不报错、日志文件为空时不轮转。
/www/wwwlogs/.log
{
daily
rotate 30
compress
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d
sharedscripts
postrotate
告诉nginx重新打开日志文件,否则会写到旧文件里
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript
}
按 ESC,输入 :wq 保存并退出。
手动执行一次该配置,测试是否有语法错误:
logrotate -vf /etc/logrotate.d/gov_logs
执行成功后,使用 ls -lh /www/wwwlogs/ 查看,应该会出现类似 xxx.log-2023-10-27.gz 的压缩文件。这证明日志切割和压缩功能正常。
政务合规通常要求日志留存6个月甚至更久(如180天)。直接在Web服务器存放如此大量的日志会占用过多磁盘空间。最佳实践是将“短期日志”保存在Web目录,将“长期归档日志”转移到数据盘或专门的备份目录。
我们在服务器上创建一个归档目录,并编写一个Shell脚本,定期将超过30天的压缩日志搬运到归档目录,并清理超过180天的过期归档。
首先创建归档目录:
mkdir -p /www/server/panel/logs/gov_archive
创建归档脚本文件:
vim /www/server/panel/script/gov_log_archive.sh
写入以下脚本内容。该脚本会查找 /www/wwwlogs 下修改时间超过30天的 .gz 文件,移动到归档目录,然后删除归档目录中超过180天的文件。
!/bin/bash
政务日志长期归档脚本
源日志目录
SOURCE_DIR="/www/wwwlogs"
归档日志目录
ARCHIVE_DIR="/www/server/panel/logs/gov_archive"
保留天数(本地保留30天,归档保留180天)
LOCAL_RETAIN_DAYS=30
ARCHIVE_RETAIN_DAYS=180
检查归档目录是否存在,不存在则创建
if [ ! -d "$ARCHIVE_DIR" ]; then
mkdir -p "$ARCHIVE_DIR"
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行日志归档任务..."
1. 移动超过 LOCAL_RETAIN_DAYS 天的压缩日志到归档目录
使用 find 命令查找 .gz 结尾且修改时间超过 -30 天的文件
find "$SOURCE_DIR" -name ".gz" -mtime +$LOCAL_RETAIN_DAYS -type f -exec mv {} "$ARCHIVE_DIR"/ \;
2. 清理归档目录中超过 ARCHIVE_RETAIN_DAYS 天的日志文件
find "$ARCHIVE_DIR" -name ".gz" -mtime +$ARCHIVE_RETAIN_DAYS -type f -exec rm -f {} \;
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 日志归档任务完成。"
赋予脚本执行权限:
chmod +x /www/server/panel/script/gov_log_archive.sh
为了让上述流程全自动运行,我们需要配置宝塔的计划任务(Crontab)。我们需要设置两个任务:一个是系统自带的 logrotate(通常系统自动执行,但我们可以确保它每天运行),另一个是我们刚刚编写的归档脚本。
1. 登录宝塔面板,进入左侧菜单【计划任务】。
2. 点击【添加任务】,任务类型选择【Shell脚本】。

3. 任务名称填写:政务日志归档。
4. 执行周期选择:每天,建议设置在凌晨流量低峰期执行,例如 03:30。
5. 脚本内容填写:
/www/server/panel/script/gov_log_archive.sh
6. 点击【提交】。
虽然 logrotate 通常由系统的 /etc/cron.daily/logrotate 自动调用,但为了确保切割在归档之前发生(防止文件被占用),建议在计划任务中手动添加一个日志切割任务,设置在每天 03:00 执行:
/usr/sbin/logrotate -vf /etc/logrotate.d/gov_logs >/dev/null 2>&1
这样,时间线逻辑如下:
logrotate,将当天的日志切分并压缩成 .gz。.gz 移动到归档目录,并清理超期文件。政务日志属于敏感数据,必须限制访问权限。默认情况下,Web日志可能位于网站根目录的上级,但仍需确保只有root用户或特定运维人员可以读取。
执行以下命令设置日志目录的权限,禁止其他用户查看:
设置日志目录所有者为root
chown -R root:root /www/wwwlogs
设置权限为750,所有者可读写执行,组可读执行,其他无权限
chmod -R 750 /www/wwwlogs
设置归档目录权限
chown -R root:root /www/server/panel/logs/gov_archive
chmod -R 700 /www/server/panel/logs/gov_archive
同时,确保Nginx配置中关闭了日志目录的目录浏览功能。虽然Nginx默认不允许直接访问 /www/wwwlogs,但如果之前有过特殊配置,请检查 server 块中是否存在 autoindex on; 并将其删除或设置为 off。
配置完成后,不要等待第二天,请立即进行手动验证,确保每一步都符合预期。
步骤1:模拟日志生成
访问你的网站几次,确保有新的请求写入到 /www/wwwlogs/your_domain.log。
步骤2:手动执行切割
在终端执行:
/usr/sbin/logrotate -vf /etc/logrotate.d/gov_logs
检查 /www/wwwlogs 目录,当前日志应该被清空(或截断),并出现一个带日期的 .gz 文件。
步骤3:手动执行归档
修改脚本中的 LOCAL_RETAIN_DAYS 为 0(为了测试,强制移动所有旧日志),或者直接使用 find 命令手动移动一个测试文件到归档目录,然后执行脚本:
/www/server/panel/script/gov_log_archive.sh
检查 /www/server/panel/logs/gov_archive 目录,确认文件已被成功移动。
步骤4:检查日志输出
如果脚本执行有问题,可以通过查看系统日志或手动运行脚本看回显信息。确保没有 "Permission denied" 或 "No such file or directory" 的错误。
通过以上步骤,你已成功构建了一套符合政务标准的日志长期留存系统:本地保留30天用于快速故障排查,归档区保留180天用于合规审计,且全程自动化运行,无需人工干预。
上一篇: 政务内网环境下宝塔站点标准化运维体系
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图