我有一个自定义日志文件,其中显示引荐来源、请求的服务器/url 和用户代理:
LogFormat "\"%{Referer}i\" -> \"%v%U\" \"%{User-Agent}i\"" referer2
这个功能非常好用,简直太棒了。它忠实地报告了所有对图像、css 文件、javascript 等的请求。现在我有一个 apache2 服务于多个域名,因此我认为针对域名编写过滤器并不是明智之举,因为它们往往会来来去去。
"-" -> "http://www.example.com" "Firefox"
"http://www.example.com" -> "http://www.example.com/foo.css" "Firefox"
"http://www.example.com" -> "http://www.example.com/foo.jpg" "Firefox"
过滤来自 example.com 的 referer 请求的最佳方法是什么?example.com 也可能称为 other.example.com、foobar.com 或 what-is-he-thinking.com,但所有请求都来自同一 IP?无需解析每个请求的 IP 地址,这是否可行?
答案1
您可能需要进一步了解 CustomLog 指令的文档:http://httpd.apache.org/docs/current/mod/mod_log_config.html#customlog
我假设您已为 referer2 设置了 CustomLog。您还可以附加“env=”作为测试,以查看是否有东西会触发日志记录。结合 SetEnvIf 指令,您可以控制是否将任何内容记录到您的 CustomLog 中。
下面是 Apache 文档中的一个示例,仅当 uri 以 .gif 结尾时才会记录到“gif-requests.log”文件:
SetEnvIf Request_URI \.gif$ gif-image
CustomLog gif-requests.log common env=gif-image
CustomLog nongif-requests.log common env=!gif-image
答案2
我意识到我误解了你最初的请求。你很可能必须使用以下命令创建和管理要忽略的引荐来源列表mod_setenvif
SetEnvIf Referer "example\.com" donotlog
SetEnvIf Referer "what-is-he-thinking\.com" donotlog
CustomLog /var/log/apache2/access.log referer2 env=!donotlog
它不会记录来自所列主机的连接。您可以将所有这些内容放在一个单独的文件中,并将其包含在配置中的合适位置。
答案3
那些试图帮助我的好心人有一个常见的误解,那就是 Apache 正在为一组已知的域提供服务,但事实并非如此。这就是为什么我不能只过滤一个域。
看来我的方法不能仅使用 Apache 来实现,还需要一个脚本。
感谢你们尽力提供帮助!