如何使用 Squid 仅记录某些结果/状态代码?

wri*_*edx 0 logging squid

默认情况下,squid 会记录所有访问信息,包括“成功”和“失败”。我只对记录“失败”感兴趣。换句话说,我想做一些事情,比如只记录 Squid DENIED 结果代码,或者不记录成功的 HTTP 事务。无论我如何定义“成功”和“失败”,我都需要能够更具体地定义 Squid 将写入日志文件的访问信息类型。有人知道怎么做这个吗?

Har*_*mat 5

您可以使用ACL实现此功能,但有一些技巧。

主要技巧是确保您不会意外检查http_status代码的二进制连接。Squid 永远不会看到二进制连接的状态代码,并且会在cache.log二进制连接中抛出警告,如果你搞砸了它。

这是一个示例配置,它将写入所有 http 成功和重定向以及完成打开套接字的所有二进制连接(除此之外我们没有成功/失败可见性)success.log,以及所有 http 失败代码和二进制连接失败打开一个套接字到failure.log.

acl CONNECT method CONNECT

# http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs)
acl success_codes http_status 100-199 # informational
acl success_codes http_status 200-299 # successful transactions
acl success_codes http_status 300-399 # redirection

acl failure_codes http_status 400-499 # client error
acl failure_codes http_status 500-599 # server error

acl success_hier hier_code HIER_DIRECT
acl failure_hier hier_code HIER_NONE

acl failure all-of CONNECT failure_hier
acl failure all-of !CONNECT failure_codes

acl success all-of CONNECT success_hier
acl success all-of !CONNECT success_codes

access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success
access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid failure
Run Code Online (Sandbox Code Playgroud)

此配置的问题在于它禁用了默认日志文件,并且不会记录与这两个 ACL 之一不匹配的任何内容。现在,我非常有信心我已经很好地编写了我的 ACL 并且我已经考虑了所有的可能性,但这仍然会让我感到紧张,所以你可能想要添加另一个日志文件来捕捉任何碰巧错过的东西两个 ACL

access_log stdio:/usr/local/squid/var/logs/unknown.log logformat=squid !success !failure
Run Code Online (Sandbox Code Playgroud)

或者您可以定义success并设置失败!success

acl CONNECT method CONNECT

# http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs)
acl success_codes http_status 100-199 # informational
acl success_codes http_status 200-299 # successful transactions
acl success_codes http_status 300-399 # redirection

acl success_hier hier_code HIER_DIRECT
acl failure_hier hier_code HIER_NONE

acl success all-of CONNECT success_hier
acl success all-of !CONNECT success_codes

access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success
access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid !success
Run Code Online (Sandbox Code Playgroud)