我正在尝试设置一个设置环境变量apache2 中的变量并将其排除在自定义日志为了防止我的日志被填满。我想匹配正则表达式和特定的 IP。
我尝试按照下面网站上列出的说明进行操作,但似乎没有效果。 http://www.howtoforge.com/setenvif_apache2
新手警告:该站点没有指定将 SetEnvIf 语句放在哪里,所以我将它们放在 apache2.conf 和 /sites-available/default 中。
下面是我想在 access.log 中过滤的内容的示例:
x.x.x.x - - [06/Sep/2014:15:02:35 -0500] "HEAD /dir/dir2/file1/file2.gif HTTP/1.1" 200 224 "-" "-"
127.0.0.1 - - [06/Sep/2014:15:02:30 -0500] "GET /foo1/foo2.php? HTTP/1.0" 200 28956 "-" "Wget/1.12 (linux-gnu)"
因此apache2.conf和/站点可用/默认,我把这个:
SetEnvIf Request_URI "HEAD /dir/" dontlog
SetEnvIf Request_Addr "127\.0\.0\.1" dontlog
SetEnvIf Request_Addr "::1" dontlog
并补充说环境=! dontlog对现有的/默认/CustomLog入口:
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog
然后我执行apachectl 优雅。
什么都没有改变。
答案1
过滤器只需添加到一个配置中。尝试删除添加到 apache2.conf 的内容,并将所有内容保留在 /sites-available/default 中。
例如,如果您想从日志中过滤掉搜索机器人,则配置文件的末尾将如下所示:
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
# Filter all search bots from the access log.
SetEnvIfNoCase User-Agent googlebot dontlog
SetEnvIfNoCase User-Agent bingbot dontlog
SetEnvIfNoCase User-Agent baiduspider dontlog
# Custom Log location + options
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog
</VirtualHost>
此外,执行 apachectl graceful 时可能需要一段时间。如果您只是测试更改,请删除日志文件,执行 apachectl graceful,当您看到日志文件重新创建时,您就会知道它们是使用您指定的新过滤器选项填充的。