如何告诉 Apache 不要在其访问日志中记录某些请求

如何告诉 Apache 不要在其访问日志中记录某些请求

我正在尝试设置一个设置环境变量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,当您看到日志文件重新创建时,您就会知道它们是使用您指定的新过滤器选项填充的。

相关内容