问题描述:
网站磁盘空间爆满,检查apache服务器,发现是apache的访问日志和错误日志过大导致的。
问题原由:
Apache默认安装下,志记录只有一个文件。如果我们在配置虚拟主机的时候,一般可能会配置ErrorLog CustomLog 记录。如果apache开启了日志文件以及错误日志功能,那么很可能apache的访问日志文件access.log和错误日志会在一段时间内变成一个几百兆甚至几G的文件,尤其大访问量的网站更是如此。如果文件过大首先会导致运维人员不好查看日志,甚至文件过大,会导致磁盘空间爆满,影响服务器的正常运行。
解决办法:
通过配置httpd.conf文件,我们可以实现按天记录日志或者按文件大小来记录日志。
在 Linux 下的设置例子如下,打开httpd.conf文件或者虚拟主机配置文件:
找到ErrorLog CustomLog 配置的地方(此处以虚拟主机的config文件举例)
ErrorLog logs/error.log
CustomLog logs/access.log common
修改为下面的代码
DocumentRoot /home/wwwroot/www.jsphp.net
ServerName jsphp.net
ServerAlias www.jsphp.net
DirectoryIndex index.php index.html
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
ErrorLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/error-%Y-%m-%d.log 86400"
CustomLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/access-%Y-%m-%d.log 86400" common
请看这2行代码
ErrorLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/error-%Y-%m-%d.log 86400"
CustomLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/access-%Y-%m-%d.log 86400"
上面二行代码的意思是每天生成一个 errorLog CustomLog 日志文件。
1、注意,因为我服务器上放了很多个网站,所以我加了个目录 wwwjsphpnet 。设置的时候,必须保证有此目录,apache不会自动新建目录所以,必须要保证目录存在,否则日志不会生成的。
2、上文中的86400为一天的秒数
3、rotatelogs 是apache服务器的一个服务,用来限制日志文件大小的。rotatelogs的位置一般在(apache安装目录/bin/目录下),配置时需要设置为你自己的路径。
4、重启Apache服务器。
补充1:
除了按天生成日志,我们还可以按文件大小来生成日志
# 限制错误日志文件为 10M
ErrorLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/error-%Y-%m-%d.log 10M"
# 限制访问日志文件为 10M
CustomLog "|/usr/apache/bin/rotatelogs /home/wwwlogs/wwwjsphpnet/access-%Y-%m-%d.log 10M" common
Windows 主机的设置方法:
在 Windows 主机设置下的设置例子如下(路径请根据你的服务器设置修改):
第一步:删除 Apache2/logs/目录下的 error.log、access.log文件
第二步:打开 Apache 的 httpd.conf配置文件并找到下面两条配置
ErrorLog logs/error.log
CustomLog logs/access.log common
直接注释掉,换成下面的配置文件。
# 限制错误日志文件为 10M
ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 10M”
# 每天生成一个错误日志文件
#ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400″
# 限制访问日志文件为 10M
CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 10M” common# 每天生成一个访问日志文件
#CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400″ common