Значением по умолчанию Squid регистрирует всю информацию о доступе включая 'успехи' и 'отказы'. Я интересуюсь входом только 'отказов'. Другими словами, я хочу сделать что-то как журнал, только Squid ОТКЛОНИЛ коды результата, или, альтернативно, не регистрируйте успешные транзакции HTTP. Независимо от того, как я определяю 'успех' и 'отказ', я должен смочь определить более конкретно, какую информацию о доступе Squid запишет в файл журнала. Кто-либо знает, как сделать это?
Эту функциональность можно достичь с помощью ACLs, хотя в этом есть некоторые хитрости.
Главная хитрость заключается в том, чтобы убедиться, что вы случайно не проверили двоичные соединения на наличие кодов http_status
. Squid никогда не видит коды статуса для двоичных соединений и бросит предупреждение в cache.log
для двоичных соединений, если вы все испортите.
Вот пример конфигураций, которые запишут все http-успешные и переадресации, а также все двоичные соединения, которые завершат открытие сокета (у нас нет видимости успеха/неуспешности за пределами этого) в успех. log
, а также все коды отказа http и двоичные соединения, которые не открывают сокет на fail.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
Проблема с этой конфигурацией заключается в том, что она отключает файл журнала по умолчанию и не записывает в журнал ничего, что не соответствует одному из этих двух ACL. Теперь я вполне уверен, что написал свои ACL хорошо и что я учёл все возможности, но это всё равно заставит меня понервничать, поэтому вы можете добавить еще один лог-файл, чтобы поймать все, что пропустит оба ACL
access_log stdio:/usr/local/squid/var/logs/unknown.log logformat=squid !success !failure
Или вы можете просто определить 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