APACHE 访问日志切割

本文介绍如何通过修改Apache虚拟主机配置实现日志文件的自动切割与老日志的删除,避免磁盘空间被日志占用。同时,展示了如何根据不同请求类型设置环境变量,以及如何排除特定IP的访问日志记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改成如下:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.111.com
   SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

需要在CustomLog ""中添加。
-l //目的是以当前系统时间为基准切割,若不加,会以UTC的时间切割日志(UTC是美国,CST是中国)
86400 //这个是一天的秒数

重新加载配置文件 -t, graceful
ls /usr/local/apache2.4/logs

生成在Apache中不同的子目录的访问日志

SetEnvIf Request_URI ^/app/subapp1(/|$) subapp1
SetEnvIf Request_URI ^/app/subapp2(/|$) subapp2

CustomLog /absolute/path/to/app/subapp1/log/access_log common env=subapp1
CustomLog /absolute/path/to/app/subapp2/log/access_log common env=subapp2

SetEnvIf 指令

说明 根据客户端请求属性设置环境变量 
语法 SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ... 
作用域 server config, virtual host, directory, .htaccess

SetEnvIf指令根据客户端的请求属性设置环境变量。第一个参数attribute必须是下列三种类别之一:

一个HTTP请求头域(参见RFC2616);例如:Host, User-Agent, Referer, Accept-Language 。可以用一个正则表达式来进行匹配。 
下列请求属性之一: 
Remote_Host 远程主机名(若可用) 
Remote_Addr 远程主机IP地址 
Server_Addr 接收到请求的服务器IP地址(2.0.43及以后版本) 
Request_Method 所用的请求方法(GET, POST等等) 
Request_Protocol 请求所使用的协议及其版本("HTTP/0.9", "HTTP/1.0", "HTTP/1.1"等) 
Request_URI 在HTTP请求行中请求的资源(通常是URL中去除协议、主机以及查询字符串后剩余的部分)。 
列出的与该请求关联的环境变量名字中的一个。这将允许SetEnvIf指令基于预先匹配的结果进行测试。只有那些由较早的SetEnvIf[NoCase]指令定义的环境变量才可以按照这种方式测试。"较早的"意思是它们在更上层的作用域(比如全局范围)中被定义或者在同一作用域中较早出现。只有在请求的属性未能得到匹配并且attribute没有使用正则表达式的时候,环境变量才会被考虑。

如:不记录192.168.7.139的访问日志
首先设置环境变量 SetEnvIf Remote_Addr "192.168.7.139" dontlog
使用上面设置的环境变量 
CustomLog "logs/access_log" common env=!dontlog

SetEnvIfNoCase
说明: Sets environment variables based on attributes of the request without respect to case
语法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: Base
模块: mod_setenvif
兼容性: Apache 1.3 and above


The SetEnvIfNoCase is semantically identical to the SetEnvIf directive, and differs only in that the regular expression matching is performed in a case-insensitive manner. For example:
SetEnvIfNoCase Host Apache.Org site=apache 
This will cause the site environment variable to be set to "apache" if the HTTP request header field Host: was included and contained Apache.Org, apache.org, or any other combination.
 
SetEnvIfNoCase 当满足某个条件时,为变量赋值,一般结合其他指令使用。
如:

1、SetEnvIf Request_URI "/logo(.)+" local_ref=0
Allow from env=local_ref  当local_ref有值时,可以访问。

2、SetEnvIfNoCase Request_URI .js$ useless-file
CustomLog logs/hebgc.com/access.log combined env=!useless-file   当满足条件时才记录日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值