Apache 虚拟主机:日志自动轮转、压缩、加密 完整配置

一、先说明两件事

  1. 日志压缩:靠 Apache 自带 rotatelogs 做日志切割 + 自动压缩,按天 / 按大小分割旧日志并打包 gz。
  2. 日志加密:Apache 本身不直接加密日志文件,通用方案:
    • 方式 1:日志切割后用 gpg 自动加密
    • 方式 2:系统层面目录加密(LUKS / 加密文件夹)

      下面给你可直接落地的生产配置,Windows + Linux 都有。


二、核心工具:rotatelogs

Apache 自带日志轮转工具,语法:
plaintext
rotatelogs 日志路径 切割大小(秒) 偏移时间

1、虚拟主机配置:按天切割 + 自动压缩(Linux)

原理

每天生成一个独立日志,隔天自动归档压缩,每个虚拟主机日志隔离。
apache
<VirtualHost *:80>
    ServerName www.site1.com
    DocumentRoot /var/www/site1

    # 错误日志:按天切割
    ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/site1-error-%Y%m%d.log 86400 480"
    # 访问日志:按天切割
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/site1-access-%Y%m%d.log 86400 480" combined
</VirtualHost>
参数解释:
  • 86400 = 24 小时按天切割
  • %Y%m%d 自动拼接年月日,每天一个日志文件

配合 logrotate 实现自动压缩

Linux 用系统 logrotate隔天自动把旧日志压缩为 .gz

新建配置 /etc/logrotate.d/apache-site1

plaintext
/var/log/httpd/site1-*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}
  • compress:启用 gzip 压缩
  • rotate 30:保留最近 30 天日志
  • delaycompress:隔一天再压缩,避免正在写入的日志被锁
生效:
bash
运行
logrotate -d /etc/logrotate.d/apache-site1  # 测试
logrotate /etc/logrotate.d/apache-site1     # 强制执行

2、Windows XAMPP 虚拟主机 日志切割 + 压缩

Windows Apache 也自带 rotatelogs.exe
apache
<VirtualHost *:80>
    ServerName www.site1.com
    DocumentRoot "D:/xampp/htdocs/site1"

    ErrorLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-error-%Y%m%d.log 86400"
    CustomLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-access-%Y%m%d.log 86400" combined
</VirtualHost>
效果:每天生成 site1-error-20260429.log
Windows 自动压缩

用 7-Zip 写批处理定时任务:

  1. .bat 遍历旧日志压缩为 7z/gz
  2. 系统计划任务每天凌晨执行

三、日志加密 两种可行方案

方案 1:日志切割后 GPG 加密(推荐)

适合 Linux,日志压缩完自动加密,只有私钥能解密。
  1. 安装 gpg
bash
运行
yum install gnupg -y
  1. 建立密钥对
bash
运行
gpg --gen-key
  1. 写 shell 脚本,遍历 /var/log/httpd/.log.gz 自动加密、删除原文件
  2. 加入定时任务 crontab 每天执行

方案 2:目录加密(最简单)

  • Linux:用 LUKS 加密分区,把 Apache 日志目录挂在加密分区
  • Windows:用 BitLocker / 压缩加密文件夹,存放日志目录

方案 3:Apache 层面不加密,应用层脱敏

日志中隐藏手机号、密码、敏感参数,从源头保护。

四、关键总结

  1. 日志分割:用 Apache 内置 rotatelogs,每个虚拟主机独立按天生成日志。
  2. 日志压缩:Linux 用 logrotate + compress 自动 gzip;Windows 用计划任务 + 7-Zip。
  3. 日志加密:Apache 不原生支持,靠 GPG 文件加密 / 系统目录加密 实现。
  4. 每个虚拟主机单独写 ErrorLog/CustomLog + 管道调用 rotatelogs,站点日志完全隔离。
上一篇 华为CE交换机-配置VRRP与BFD联动功能
下一篇 MongoDB中string类型比较大小