Чтение онлайн

ЖАНРЫ

Стахнов Алексей Александрович

Шрифт:

Cache digest

Компактная форма представления списка содержимого кэша proxy-сервера. Proxy-серверы могут обмениваться этой информацией с соседями для избежания необходимости делать ICP-запросы (экономия трафика). В качестве ключей объектов используется протокол шифрования MD5.

Иерархия кэшей

Иерархия кэшей – это структура кэширующих proxy-серверов, расположенных логически как родительский/дочерний и братский узлы таким образом, что кэши, ближайшие к интернет-каналу, являются родителями тем proxy-серверам, которые находятся дальше от точки доступа к Интернету. В случае, когда кэш запрашивает объект от родителя, и у того в кэше необходимый объект отсутствует, родительский proxy-сервер получает объект из Интернета, кэширует его и передает дочернему. Таким образом, при помощи иерархии достигается максимальная разгрузка канала.

Кроме родительских/дочерних отношений, Squid поддерживает понятие братских кэшей – находящихся на одном уровне иерархии. Каждый proxy-сервер в иерархии независимо ни от кого решает, откуда получать необходимый объект – напрямую из Интернета, от родительского или братского кэша.

Алгоритм получения запрошенного объекта пакетом Squid

Алгоритм таков:

1. Разослать ICP-запросы всем братским кэшам.

2. Дождаться всех ответов, пришедших в течение заданного времени:

• получив первый ответ hit (попадание), получить объект;

• или взять объект от первого родительского кэша, ответившего miss (зависит от настройки);

• или получить объект из Интернета.

Конфигурирование пакета Squid

Основное место конфигурирования пакета Squid – файл /etc/Squid.conf. Размер этого файла достаточно велик, поскольку он содержит множество конфигурируемых параметров, начиная с номера порта для ICP-запроеов и заканчивая правилами доступа к информации. Далее приведены параметры конфигурации Squid-сервера, разбитые на типы. Однако приведенный список не является полным и исчерпывающим, поскольку он содержит только наиболее интересные (с нашей точки зрения) параметры конфигурации.

Сетевые параметры

Сетевые параметры proxy-сервера имеют следующие настройки.

• Порт для запросов клиентов proxy-сервера:

http_port 3128

• Порт для ICP-запросов. В том случае, если не предполагается использовать иерархию proxy-серверов – необходимо указать нулевой порт:

icp_port 3130

• Порт для общения с соседями ICP – через ТСР-протокол:

htcp_port 4827

• К каким multicast-rpynnaM (соседи-серверы squid) подсоединяться для получения ICP, если используется multicast:

mcast_groups 239.128.16.128 224.0.1.20

• По умолчанию режим пассивного FTP включен, но если Squid находится за брандмауэром, то необходимо выключить:

passive_ftp on | off Соседи

Как уже упоминалось ранее, Squid может обмениваться информацией с другими squid-серверами, которых принято называть соседями.

• Каждый сосед описывается отдельной строкой:

cache_peer hostname type proxy-port icp-port options

– параметр type

имеет следующие значения:

· parent – старший в иерархии;

· Sibling – одного уровня.

– параметр options имеет следующие значения:

· proxy-only – объекты, взятые с указанного узла, не хранить у себя в кэше;

· weight=число – указывает приоритет хоста, чем значение больше, тем больше приоритет;

· ttl=число – время жизни пакета используется при настройке multicast;

· no-query – не посылать ICP-запросы;

· default – самый старший в иерархии;

· round-robin – определяет родительские кэши, используемые по очереди;

· multicast-responder – данный сосед является членом multicast-группы;

· no-digest – не запрашивать от этого соседа cashe digest;

· iogin=user: password – определение имени и пароля для случая, если старший в иерархии proxy-сервер требует аутентификации;

· connect-timeout=число – время ожидания ответа от соседей;

• cache_peer_domain host domain [domain…] – ограничить запросы К данному соседу данным списком доменов;

• icp_query_timeout miiisec – время ожидания ответа в миллисекундах;

• mcast_icp_queгy_timeout miiisec – ожидание ответа на регулярные multicast-опросы;

• dead_peer_timeout seconds – время ожидания ответа от соседа, по истечении которого считается, что сосед отсутствует в сети;

• hierarchy_stopllst – список строк (через пробел), при встрече которых в URL, запрос не будет кэшироваться; по умолчанию cgi-bin;

• no_cache deny имя-acl – определяет список объектов, которые не будут кэшироваться.

Размер кэша

Раздел предназначен для определения параметров кэша – размера, использования, времени хранения информации и т. п.

• cache_mem 8 MB – объем оперативной памяти, используемой для хранения обрабатываемых объектов;

• cache_swap_high 95 – при достижении данного уровня заполнения кэша (в процентах) начинается ускоренный процесс очистки кэша от устаревших объектов;

• cache_swap_iow 90 – процесс удаления старых объектов заканчивается, если достигнут данный уровень (в процентах);

• maximum_object_size 4096 KB – максимальный размер кэшируемого объекта;

• minimum_object_size 0 KB – минимальный размер кэшируемого объекта; файлы меньшего размера не сохраняются;

• ipcache_size 1024 – размер кэша для IP-адресов;

• ipcache_high 95 – верхний уровень заполнения IP-кэша для алгоритма удаления старых объектов;

• ipcache_iow 90 – нижний уровень заполнения IP-кэша для алгоритма удаления старых объектов.

Имена и размеры файлов

В этом разделе определяются имена и размеры используемых файлов:

• cache_dir тип Directory-Name Mbytes Level-1 Level2 – определяет имя, размер и количество подкаталогов на первом и втором уровне кэша на диске – каждый кэшируемый объект кладется в отдельный файл, файлы хранятся в двухуровневой иерархии каталогов;

• cache_access_log /usr/local/squid/logs/access.log – место хранения журнала обращений к кэшу;

• cache_log /usr/local/squid/logs/cache. log – место хранения журнала запусков процессов;

• Cache_store_log /usr/local/squid/logs/store.log – место хранения журнала записи объектов в дисковый кэш;

• emulate_httpd_log on | off – производить ли эмуляцию формата журнала HTTPD;

• mime_table /usr/local/squid/etc/mime. conf – таблица ТИПОВ MIME;

• iog_mime_hdrs off – в журнал access записываются полученные HTTP-заголовки;

• useragent_log имя-файла – в этот файл будут записываться строки User-agent из HTTP-заголовков;

• debug_options раздел, уровень – уровень отладки; all – для всех разделов; по умолчанию all, i;

• iog_fqdn off – позволяет определять и записывать в журнал полные доменные имена источника запроса.

Параметры внешних программ

Как и большинство серьезных программ, Squid позволяет воспользоваться внешними программами для выполнения некоторых действий. К примеру – сбор статистики или обработка трафика.

• ftp_user email-адрес – будет подставляться вместо пароля при анонимном доступе к FTP-серверам; по умолчанию – squid@, вызывает проблемы с серверами, которые проверяют синтаксис адреса;

• cache_dns_program /usг/local/squid/bin/dnsserver – местоположение программы, кэширующей DNS-запросы;

• dns_children 5 – число процессов, которые делают DNS lookup (получение по IP-адресу доменного имени и наоборот);

• dns_nameservers список-IР-адресов – используется вместо списка DNS-серверов, определенного в /etc/resolv.conf;

• redirect_program none – позволяет подключить программу преобразования URL при каждом запросе;

• redirect_children 5 – параметр определяет, сколько процессов преобразования URL запускать параллельно;

• redirect_rewrites_host_header on – разрешает или запрещает изменение поля Host: в заголовке запроса; по умолчанию Squid переписывает поле Host: в заголовках преобразованных запросов;

• redirector_access aci – какие запросы направлять через редиректор; по умолчанию – все;

• authenticate_program none – позволяет производить аутентификацию клиентов, делающих запросы; программа должна в цикле читать строку "имя пароль" выдавать ок или err; должен быть определен параметр ACL proxy_auth;

• authenticate_children 5 – сколько параллельных процессов будут заниматься аутентификацией;

• authenticate_ttl 3600 – сколько секунд кэшировать результаты работ программы аутентификации;

• authenticate_ip_ttl число – необходимо установить 0, чтобы с нескольких адресов не смогли воспользоваться одним именем.

Тонкая настройка кэша

С помощью следующих параметров можно произвести тонкую настройку параметров кэша:

• wais_reiay_host localhost – куда перенаправлять WAIS-запросы:

• wais_reiay_port 8000 – куда перенаправлять WAIS-запросы;

• request_header_max_size 10 KB – максимальный размер заголовка;

• request_body_max_size 1 MB – максимальный размер объекта;

• refresh_pattern [-i] regex min_age percent max_age[options] – используется для определения, не устарел ли объект в кэше.

Имя объекта сравнивается по очереди с регулярными выражениями в строках refreshjsattern до первого совпадения, параметры из соответствующей строки используются в алгоритме проверки. По умолчанию регулярные выражения различают прописные/строчные буквы, чтобы игнорировать это различие, используется ключ -i. min_age и max_age – время жизни объекта в минутах. По умолчанию:

• refresh_pattern ^ftp: 1440 20 % 10080

• refresh_pattern ^gopher: 1440 0 % 1440

• refresh_pattern. 0 20 % 4320

Более подробную информацию смотрите в документации на Squid;

• reference_age 1 month – максимальное время хранения неиспользуемого объекта до его удаления;

• quick_abort_min 16 КВ – если клиент оборвал запрос, а осталось докапать всего min кв, то Squid произведет докачку объекта;

• quick_abort_max 16 КВ – если клиент оборвал запрос и осталось качать больше max кв, то Squid прекратит получение объекта;

• quick_abort_pct число – если клиент оборвал запрос и уже получено больше чем число процентов объекта, то Squid докачает объект;

• negative_ttl 5 minutes – время кэширования негативных ответов (например "connection refused", "404 not found") – число задает их время жизни в кэше;

• positive_dns_ttl 6 hours – время кэширования положительных DNS-ответов – число задает их время жизни в кэше;

• negative_dns_ttl 5 minutes – время кэширования негативных DNS-ответов – число задает их время жизни в кэше;

• range_offset_iimit о KB – если клиент делает запрос с середины объекта, то:

– 1 – вынуждает Squid загрузить весь объект в кэш до того, как начать передачу клиенту;

– 0 – означает, что Squid никогда не будет грузить больше, чем клиент запросил;

– число, отличное от 1 – начало запроса меньше этого числа – Squid будет грузить весь объект.

Время ожидания

В этом разделе задаются различные временные параметры Squid:

• connect_timeout 120 seconds – время ожидания соединения с сервером;

• siteselect_timeout 4 seconds – максимальное время на выбор URL;

• read_timeout 15 minutes – сколько времени разрешается ждать следующего байта от сервера;

• request_timeout 30 seconds – сколько разрешается ждать запроса после установления соединения;

• client_lifetime 1 day – сколько времени разрешать клиенту быть присоединенным к Squid; соединение обрывается, даже если происходит передача данных;

• haif_ciosed_clients on – разрешать наполовину закрытые соединения – например чтение есть, а запись уже закрыта;

• shutdown_lifetime 30 seconds – сколько времени продолжать обслуживание после получения сигнала SIGTERM или SIGHUP.

ACL – Access Control List

Этот раздел определяет правила доступа пользователей к группам файлов и хостов. С помощью ACL можно очень гибко настроить доступ к различным сайтам.

acl имя тип строка – определение списка доступа (имя – имя правила, тип – тип объекта, строка – регулярное выражение (шаблон для сравнения), по умолчанию чувствительное к регистру букв.

Параметр тип может принимать следующие значения:

• IP-адреса клиентов:

src ip-address/netmask…

• диапазон адресов:

src addrl-addr2/netmask…

• получение IP-адреса no URL:

srcdomain foo.com…

• если в URL использовался IP, то делается попытка определить имя домена, если не удалась, то подставляется слово попе:

dstdomaien foo.com…

• получение IP-адреса клиента по URL с использованием регулярных выражений:

srcdom_regex [-i] строка…

• если в URL использовался IP, то делается попытка определить имя домена используя регулярные выражения:

dstdom_regex [-i] строка…

• регулярное выражение для всего URL:

url_regex [-i] строка

• регулярное выражение для path-части URL:

urlpath_regex [-i] строка

• определяются безопасные порты:

port порт…

• сопоставляется заголовок User-Agent:

browser [-i] regexp

• ограничивает число соединеной с одного и того же IP:

maxconn число Права доступа

Права доступа определяются следующими строками:

• http_access allow| deny [!] aclname… – кому разрешать доступ к proxy по HTTP;

• icp_access allow| deny [!] aclname… – кому разрешать доступ к proxy по ICP;

• miss_access allow| deny [!] aclname. – кому разрешить получать ответ MISS;

• cache_peer_access cache-host allow|deny [!]aclname… – ограничить запросы к данному соседу;

• proxy_auth_realm Squid proxy-caching web server – строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кэшу.

Параметры администрирования

Параметры администрирования определяются следующими строками:

• cache_mgr email – почтовый адрес, на который будет послано письмо, если у Squid возникнут проблемы;

• cache_effective_user nobody – если запускается Squid от имени root, то заменить UID на указанный;

• cache_effective_group nogroup – если запускается Squid от группы root, то заменить GID на указанный;

• visible_hostname имя-хоста – это имя будет упоминаться в сообщениях об ошибках;

• unique_hostname уникальное-имя – если нескольким кэшам дали одно и то же visibie_hostname, необходимо определить каждому из них уникальное имя;

• hostname aliases имя… – список синонимов для имени хоста.

Параметры для работы в режиме ускорителя HTTP-сервера

Параметры для работы в режиме ускорителя HTTP-сервера определяются следующими строками:

• httpd_accel_host hostname – если нужна поддержка виртуальных хостов, в частности для transparent proxy (прозрачное кэширование), то вместо имени указать virtual;

• httpd_accei_port port – порт для HTTP-сервера;

• httpd_accei_with_proxy on | off – кэширование для ускоряемого сервера;

• httpd_accel_uses_host_header on | off – для работы в прозрачном режиме требуется включить, иначе виртуальные серверы не будут правильно кэшироваться.

Разное

Здесь содержатся параметры Squid, не вошедшие в предыдущие разделы:

• dns_testnames netscape.com internic.net microsoft.com – список имен хостов, на примере которых проверяется работоспособность DNS;

• iogfile_rotate 10 – данный параметр задает количество старых копий при ротации;

• append_domain.vasya.ru – добавляется к имени хоста, если в нем нет ни одной точки;

• tcp_recv_bufsize о bytes -о означает, что надо использовть размер буфера по умолчанию;

• err_htmi_text строка – подставляется в шаблоны текстов сообщений об ошибках;

• deny_info err_page_name acl – запросы, не прошедшие проверку в http_access, проверяются на соответствие ACL, выдается соответствующее сообщение об ошибке из файла page_name;

• memory_poois on | off – эта переменная определяет политику использования захваченной памяти:

– on – однажды захваченная, но не используемая память не отдается обратно в систему;

– off – позволяет освобождать захваченную память;

• memory_рооls_limit байт – максимальное количество неиспользуемой памяти, которое Squid будет удерживать, если 0 – то удерживать все, что было захвачено;

• fоrwarded_fоr on | off – если включено, то Squid будет вставлять IP-адрес или имя в заголовки перенаправляемых HTTP-запросов: X-Forwarded-For: 192.1.2.3; если выключено, то X-Forwarded-For: unknown;

• log_icp_queries on | off – записываются ли в журнал ICP-запросы;

• icp_hit_staie on | off – возвращать ли ответ icp_hit для устаревших объектов;

• cachemgr_passwd password action action… – задание пароля для действий по администрированию Squid; чтобы запретить действие – поставьте пароль disable; чтоб разрешить действие без проверки пароля – поставьте пароль попе, кроме действий config и shutdown; полную информацию смотрите в документации на Squid;

• store_avg_object_size 13 KB – предполагаемый средний размер объекта, используемый для расчетов;

• store_objects_per_bucket 20 – число объектов на хэш-корзину;

• client_db on | off – сбор статистики о клиентах;

• netdb_iow 900 – нижняя граница для базы данных измерения ICMP;

• netdbjiigh 1000 – верхняя граница для

базы данных измерения ICMP;

• netdb_ping_period 5 minutes – минимальное время между посылок ping-пакетов в одну и ту же сеть;

• query_icmp on | off – должны ли соседи в IСР-ответы включать ICMP-данные;

• test_reachabiiity on | off – если включить, то ответ icpjmiss будет заменяться на icp_miss_nofetch, если сервер отсутствует в базе данных ICMP или RTT равен нулю;

• buffered_iogs on | off – при включении запись в журнал буферизуется;

• always_direct allow| deny [!] aclname. – запросы, удовлеворяющие данным ACL, не кэшировать, а всегда направлять к первоисточнику;

• never_direct allow| deny [!] aclname. – запросы, удовлеворяющие данным ACL, всегда кэшировать;

• anonymize_headers allow| deny header_name.. – перечень заголовков, которые нуждаются в анонимизации;

• fake_user_agent none – если заголовок User-Agent фильтруется с помощью анонимизатора, то подставляется эта строка;

• minimum_retry_timeout 5 seconds – если сервер имеет несколько IP-адресов, то тайм-аут соединения делится на их количество;

• maximum_singie_addr_tries 3 – сколько раз пытаться соединиться с сервером, имеющим один IP-адрес; если сервер имеет несколько IP-адресов, то каждый из них будет опробован один раз;

• snmp_port 3401 – порт, который слушает Squid для SNMP-запросов;

• snmp_access allow| deny [!] aclname… – определяет, кто будет допущен к SNMP-порту;

• offiine_mode on | off – если включить, то Squid будет брать объекты только из кэша и не будет пытаться обращаться к первоисточникам;

• uri_whitespace strip – что делать с запросами, имеющими пробелы в URI; возможные варианты:

– strip – удалять пробелы;

– deny – сообщать Invalid Request (ошибочный запрос);

– allow – передавать как есть;

– encode – кодировать в соответствии с RFC 1738, передавать дальше;

– chop – остаток после первого же пробела отбрасывать;

• mcast_miss_addr адрес – по этому multicast-адресу посылается сообщение при каждом «непопадании» в кэш;

• mcast_miss_port порт – этот порт не пользуется для посылки сообщения;

• strip_query_terms on – удалять параметры запроса перед записью в журнал;

• ignore_unknown_nameservers on – игнорировать сообщения от DNS-серверов, с которыми Squid не работает.

Пример конфигурации Squid

Как вы уже заметили, опций для конфигурации Squid очень много. Для быстрой настройки proxy-сервера можно воспользоваться приведенными ниже параметрами. Конечно они не являються идеальными, наверняка тонкая настройка поможет вам оптимизировать сервер как с точки зрения увеличения производительности, так и с точки зрения безопасности.

Возьмем стандартный файл Squid.conf и отредактируем только нижеприведенные строки:

• http_port 3128 – номер порта, на котором Squid будет слушать команды от клиентов;

• hierarchy_stoplist cgi-bin, chat – слова в URL, при обнаружении которых proxy-сервер будет не кэшировать объекты, а напрямую перенаправлять запрос серверу;

• cache_mem 16 MB – сколько оперативной памяти Squid может забрать под свои нужды. Чем больше выделить памяти – тем быстрее будут обрабатываться запросы. Весьма зависит от количества клиентов;

• maximum_object_size 16384 KB – максимальный размер объектов, которые будут сохранены в кэше. Размер специфичен для ваших задач и объема жесткого диска;

• cache_dir /usr/local/Squid/cache 2048 16 256 – указывает proxy-серверу, где сохранять кэшируемые файлы. Под кэш выделяется два гигабайта и создается 16 и 256 каталогов 1-го и 2-го уровня;

• ftp_user anonymous@vasya.ru – задает proxy-серверу, под каким паролем регистрироваться на анонимных FTP-серверах;

• negative_ttl 1 minutes – время жизни страничек с ошибкой;

• positive_dns_tti 6 hours – время жизни удачного преобразования DNS-имен в IP-адреса;

• negat ive_dns_tt 1 5 minutes – время жизни соответственно удачного и неудачного преобразования DNS-имен в IP-адреса.

Дальнейшие наши действия касаются разграничения прав пользователей.

Сначала необходимо определить ACL (Access Control List, список управления доступом). Сначала закомментируем все строчки в файле Squid.conf, начинающиеся на aci. Затем пишем свои правила. К примеру:

• acl users proxy_auth vasya tolik petya nina – этой строчкой мы указываем proxy-серверу правило, по которому разрешаем пускать вышеперечисленных пользователей с использованием авторизующей программы через Squid;

• acl BANNER url_regex banner reklama linkexch banpics us\.yimg\.com [\./]ad[s]? [\./] – это правило определяет адреса, содержащие рекламу. Интересна для тех, кто хочет отказаться от получения разнообразных баннеров. Позволяет экономить сетевой трафик;

• http_access deny [users – эта строка запрещает доступ всем пользователям, кроме тех, которые перечислены в группе users;

• http_access deny banner – запрещаем доступ к URL, удовлетворяющим правилу banner (убираем рекламу);

• proxy_auth_realm Vasy Pupkina proxy-caching web server – строка, которая выводится в окно с логином/паролем;

• cache_mgr vasya@pupkin.ru – если у клиента возникает проблема – выводится HTML-страница с сообщением и адресом электронной почты администратора, в нашем случае vasya@pupkin.ru;

• cache_effective_user nobody – с правами какого пользователя выполняется proxy-сервер;

• cache_effective_group nogroup – с правами какой группы выполняется proxy-сервер;

• client_db on – параметр разрешает собирать статистику по клиентам.

Поскольку стандартной настройки в такой сфере, как использование канала, места на винчестере, оперативной памяти просто не может быть, более тонкие настройки и ограничения вы должны обдумать и настроить сами.

Создание иерархии proxy-серверов

Чтобы разместить кэш в иерархии, нужно воспользоваться директивой cache_host.

Приведенной ниже частью конфигурационного файла Squid.conf сервер pupkin.ru сконфигурирован так, что его кэш получает данные с одного родительского и с двух братских кэшей:

cache_host petya.com parent 3128 3130

cache_host monya.ru sibling 3128 3130

cache_host gesha.ru sibling 3128 3130

Директива cache_host_domain позволяет задавать для каждого определенного домена или группы доменов как братский, так и родительский кэш. Приведенный ниже пример показывает что kesha.ru получает данные из доменов. ru, au, aq, fj, nz, agesha.ru – из доменов. uk, de, fr, no, se, it.

cache_host kesha.ru parent 3128 3130

cache_host gesha.ru parent 3128 3130

cache_host uc.cache.nlanr.net sibling 3128 3130

cache_host bo.cache.nlanr.net sibling 3128 3130

cache_host_domain kesha.ru.ru.au.aq.fj.nz

cache_host_domain gesha.ru.uk.de.fr.no.se.it

Transparent proxy

Transparent proxy – это таким образом настроенный proxy-сервер, что его использование прозрачно для пользователей. То есть пользователям не придется что либо настраивать в своих браузерах. Для этого необходимо решить следующие задачи:

1. Добиться чтобы все HTTP-запросы пользователей попали на компьютер, где работает ваш HTTP proxy-сервер.

2. Добиться чтобы эти запросы попадали собственно к proxy-серверу.

3. Добиться того чтобы ваш proxy-сервер их правильно обработал.

Выполнить первый пункт можно разными способами. Самый простой путь – поставить proxy-сервер и маршрутизатор на один сервер, через который проходит весь трафик.

Чтобы HTTP-запросы пользователей попали к HTTP proxy-серверу, необходимо таким образом настроить маршрутизатор (брандмауэр), чтобы транзитные пакеты, предназначенные для порта 80, попадали на вход proxy-сервера. Если proxy-сервер должным образом настроен, он правильно обработает полученные запросы. В Squid.conf добавляются следующие строчки:

httpd_accel www.your.domain 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

Ключи запуска Squid

Помимо конфигурационного файла, поведением программы Squid можно управлять с помощью ключей командной сторки. Далее приведены некоторые из них с поянениями:

• -а – указывает порт для входных HTTP-запросов;

• -d – выводит отладочную информацию на устройство stderr (обычно – текущая консоль);

• -f имя_файла_конфигурации – позволяет использовать альтернативный конфигурационный файл (удобно для отладки сервера);

• -h – выводит краткую справку по программе Squid;

• -k – этот ключ позволяет посылать Squid следующие управляющие сигналы:

– reconfigure – посылка сигнала hup. Используется для прочтения измененного конфигурационного файла;

– rotate – позволяет произвести ротацию журналов (сигнал usri);

– shutdown – прервать выполнение программы с корректным завершением (сигнал term);

– interrupt – немедленно завершить работу программы (сигнал шт);

– kin – «убить» приложение (kill);

– debug – начать/закончить полную трассировку (сигнал USR2);

– check – проверка (сигнал zero);

• -u – задает порт для входных 1СР-запросов;

• -v – выводит версию программы;

• -z – создает дисковый кэш при первом запуске (Важно!);

• -D – предписывает не производить DNS-тест при запуске;

• -F – восстанавливает после сбоя не в фоновом режиме (ускорение восстановления);

• -N – предписывает не становиться фоновым процессом;

• -V – включает поддержку виртуальных хостов для режима акселерации;

• -X – включает отладку при разборе конфигурационного файла;

• -Y – включает быстрое восстановление после сбоев.

Первый раз Squid нужно запускать с ключом -z:

Squid -z

При этом программа создаст дерево кэшей. Этой же командой следует воспользоваться с том случае, если вам необходимо очистить кэш proxy-сервера. Для закрыатия текущих файлов журналов и создания новых (чистых) файлов используется команда:

Squid -k rotate

Файлы журналов Squid

Файл access.log

Файл access.log используется для хранения информации о всех подключениях к proxy-серверу. Запись добовляется, когда клиент закрывает соединение. Для сервера с большим трафиком файл может за день увеличиться на десятки мегабайт. К примеру, при трафике в 10 тыс. запросов в сутки объем журнала увеличивается примерно на 2 Мбайт.

Еденицей информации о соединении является строка. Строка состоит из десяти полей. Ниже приведено описание полей с пояснениями:

• timestamp – время в UNIX-формате (время с 1 января 1970 года в миллисекундах);

• elapsed – затраченное время в миллисекундах;

• client IP address – IP-адрес клиента, пославшего запрос;

• type/HTTP – результат запроса, где type:

– TCP_HIT – верная копия объекта нашлась в кэше;

– TCP_MISS – запрашиваемый объект не был в кэше;

– TCP_EXPIRED – объект есть в кэше, но он устарел;

– ТСP_CLIENT_REFRESH – клиент запросил принудительное обновление объекта;

– TCP_REFRESH_HIT – объект в кэше был старым, был сделан запрос к источнику и источник ответил "объект не изменился";

– TCP_REFRESH_MISS – объект в кэше был старым, был сделан запрос к источнику и тот вернул обновленное содержание;

– TCP_IMS_HIT – клиент выдал запрос, объект оказался в кэше и свежим;

– TCP_IMS_MISS – клиент выдал запрос для просроченного объекта;

– ТСP_REF_FAIL_HIT – объект в кэше устарел но запросить новую копию не удалось;

– TCP_SWAPFAIL – объект должен находиться в кэше, но его не смогли извлечь;

– TCP_DENIED – отказ;

• size – количество байтов, переданных клиенту;

• method – метод передачи информации; GET, HEAD, POST для ТСР-запросов или ICP_QUERY для UDP-запросов;

• URL – адрес запрашиваемого объекта;

• ident "-", если недоступен;

• hierarhy data/Hostname – результат запросов к братским/родительским кэшам:

– PARENT_HIT – UDP-запрос к родительскому кэшу (parent) вернулся с подтверждением;

– PARENT_UDP_HIT_OBJECT – объект оказался в родительском кэше parent и поместился в UDP-ответе;

– DIRECT – объект был запрошен с оригинального сервера;

• тип содержимого (MIME-тип/подтип).

Файл store.log

Файл store.log используется для хранения информации о всех кэшируемых объектах proxy-сервера. Единицей информации о соединении является строка. Строка состоит из одиннадцати полей. Ниже приведены поля с пояснениями:

• Time – время в UNIX-формате (время с 1 января 1970 года в миллисекундах);

• action – действие:

– RELEASE – удален из кэша;

– SWAPOUT – сохранен на диск;

– SWAPIN – был на диске, загружен в память;

• HTTP reply code – код ответа HTTP-сервера;

• HTTP Date – дата создания объекта;

• HTTP Last-Modified – время последней модификации объекта;

• HTTP Expires – срок жизни объекта;

• HTTP content-Type – тип объекта;

• HTTP Content-Length – размер объекта;

• реально полученное число байтов. В том случае, если не совпадает с предыдущим полем, объект не сохраняется;

• HTTP metod – метод передачи информации (GET, HEAD, POST).

• Access key – ключ доступа (обычно URL).

Файл useragent.log

Предназначен для хранения информации о том, с какими пользовательскими агентами (Web-браузерами) работают клиенты. Малоинтересен в практическом плане. Разве что для получения статистики по частоте использования тех или иных Web-браузеров.

Нестандартные применения

Функциональность программы Squid не ограничивается только функцией proxy-сервера. У нее есть достаточно много других интересных применений. В этом разделе мы рассмотрим только некоторые из них.

Борьба с баннерами

Наверняка вам встречались Web-страницы, на которых нужной информации было от силы на килобайт, а рекламных баннеров (зачастую анимированных) – пять-шесть. Хорошо когда канал большой и бесплатный. Когда же пользуешься обычным коммутируемым соединением да еще платишь за соединение из своего кармана, каждый килобайт начинаешь считать. В этом случае можно настроить локальный сервер Squid таким образом, чтобы не происходила закачка ненужных баннеров. Этого можно добиться несколькими способами.

Вариант 1

Простой. На месте баннеров показываются разорванные картинки или перекрещенные прямоугольники (неполученные файлы).

1. Определяем сайты банерных сетей и создаем для них регулярные выражения.

2. Создаем в каталоге /usr/local/Squid/etc следующие файлы:

– banners_path_regex – содержит по одному регулярному выражению на строку;

– banners_regex – содержит по одному регулярному выражению на строку;

– banners_exclusion – это строки, трактуемые в предыдущих файлах как баннеры, но изменять которые не рекомендуется.

3. В Squid.conf добавляем следуюшие правила:

acl banners_path_regex urlpath_regex «/usr/local/Squid/etc/banners_path_regex»

acl banners_regex url_regex "/usr/local/Squid/etc/banners_regex"

acl banners_exclusion url_regex "/usr/local/Squid/etc/banners_exclusion"

http_access deny banners_path_regex !banners_exclusion

http_access deny banners_regex !banners_exclus ion

Вариант 2

Замена рекламных баннеров на свою картинку, которая находится на локальном для proxy-сервера компьютере.

1. Определяем сайты банерных сетей и создаем для них регулярные выражения.

2. На своем сервере создаем «заменитель» рекламных картинок – файл mybanner.gif.

3. Настраиваем перенаправление (редиректор) в файле Squid.conf – redirect_program /usr/local/Squid/bin/banner.pl.

4. Создаем прстой скрипт на Perl – banner.pl:

Поделиться с друзьями: