Чтобы присоединить ваш кеш к иерархии, используйте директиву cache_host
в squid.conf, чтобы указать родительские и братские кеши.
К примеру, в следующем squid.conf
с хоста childcache.example.com кеш настраивается на получение данных с одного
родительского и двух братских кешей:
# squid.conf - On the host: childcache.example.com
#
# Format is: hostname type http_port udp_port
#
cache_host parentcache.example.com parent 3128 3130
cache_host childcache2.example.com sibling 3128 3130
cache_host childcache3.example.com sibling 3128 3130
Директива cache_host_domain позволяет вам указать братские или
родительские кеши для определенных доменов:
# squid.conf - On the host: sv.cache.nlanr.net
#
# Format is: hostname type http_port udp_port
#
cache_host electraglide.geog.unsw.edu.au parent 3128 3130
cache_host cache1.nzgate.net.nz parent 3128 3130
cache_host pb.cache.nlanr.net parent 3128 3130
cache_host it.cache.nlanr.net parent 3128 3130
cache_host sd.cache.nlanr.net parent 3128 3130
cache_host uc.cache.nlanr.net sibling 3128 3130
cache_host bo.cache.nlanr.net sibling 3128 3130
cache_host_domain electraglide.geog.unsw.edu.au .au
cache_host_domain cache1.nzgate.net.nz .au .aq .fj .nz
cache_host_domain pb.cache.nlanr.net .uk .de .fr .no .se .it
cache_host_domain it.cache.nlanr.net .uk .de .fr .no .se .it
cache_host_domain sd.cache.nlanr.net .mx .za .mu .zm
Указанная выше конфигурация показывает, что кеши
pb.cache.nlanr.net и it.cache.nlanr.net будут использоваться для
доменов uk, de, fr, no, se и it, кеш sd.cache.nlanr.net -
для доменов mx, za, mu и zm, кеш cache1.nzgate.net.nz - для доменов au, aq, fj и nz.
У нас есть простая инструкция по подключению к иерархии кешей NLANR.
Иерархия NLANR обеспечивает вам первоисточник для обращения к родительскому или братскому кешу. Присоединение к глобальной системе кешей NLANR зачастую улучшают качество работы вашей службы кеширования.
Просто включите следующую опция в вашем squid.conf и вы будете зарегистрированы:
cache_announce 24
announce_to sd.cache.nlanr.net:3131
ЗАМЕЧАНИЕ: анонсирование вашего кеша - не тоже самое, что присоединение к ирерархии кешей. Вы можете присоединится к иерархии NLANR и без регистрации, равно как вы можете зарегистрироваться в иерархии кешей NLANR без присоединения к ней.
Обратитесь к регистрационной базе данных кешей NLARN, чтобы найти ближайшие к вам кеши. Имейте ввиду, что наличие кеша в регистрационной базе данных вовсе не оазначает, что что он будет для вас родительским/братским/дочерним. Но ведь ничего не мешает поинтересоваться...
Пояснения перенесены в другую секцию.
Замечание: Информация, представленная здесь верна ядля версии 2.2.
Если вы находитесь за файерволом, то вы не можете устанавливать прямые соединения с внешним миром, поэтому вы должны использовать родительский кеш. Squid не использует ICP-запросы . если находится за файерволом или имеет всего один родительский кеш.
Вы можете использовать список доступа never_direct в вашем
squid.conf, чтобы указать какой из запросов должен быть послан вашему родительскому
кешу через файервол. К примеру, если Squid может соединятся напрямую со всеми серверами,
имена которых оканчиваются на mydomain.com, но для других должен использовать
родительский кеш, укажите такое:
acl INSIDE dstdomain mydomain.com
never_direct deny INSIDE
Заметьте, что внешние домены не совпадут с INSIDE
acl. Когда она не совпадают, действием по умолчанию будет действие,
противоположное последнему указанному. Как если бы присутствовало
конечное правило never_direct allow all.
Вы также можете указать внутренние серверы по IP-адресам
acl INSIDE_IP dst 1.2.3.4/24
never_direct deny INSIDE
Заметьте, что если вы используете IP-адреса, то Squid должен провести
их преобразование по DNS, чтоы конвертировать URL в адрес. У ваших внутренних
DNS-серверов может не получится преобразовывать внешние домены.
Если вы используете never_direct и вы имеете несколько родительских кешей, то возможно захотите указать один из них родительский кеш по умолчанию, в случае, если Squid не может определить, какой из них использовать. Это делается при помощи опции default в директиве cache_peer. К примеру:
cache_peer xyz.mydomain.com parent 3128 0 default
Замечание: Представленная здесь информация верна для версии 2.2.
Прежде всего у вас должен быть указан родительский кеш. Во-вторых вам необходимо указать Squid-у не соединятся напрямую с запрашиваемым сервером. Это можно сделать при помощи таких 3-х строк конфигурации:
cache_peer parentcache.foo.com parent 3128 0 no-query default
acl all src 0.0.0.0/0.0.0.0
never_direct allow all
Заметьте, что при такой конфигурации, если родительский кеш "упал" или не отвечает,
то каждый запрос будет возвращать сообщение о ошибке.
Если вам хочется соединятся напрямую, когда все ваши родительские кеши недоступны, вы должны использовать другой подход:
cache_peer parentcache.foo.com parent 3128 0 no-query
prefer_direct off
В таком случае Squid при отсутствии позитивных ICP, HTCP, других ответов
соединится напрямую с запрашиваемым сервером, взамен того, чтобы использовать
родительский кеш.
Директива prefer_direct off указывает Squid-у сначала попробовать
использовать родительский кеш.
Процессы dnsserver используются squid потому-что вызов библиотечной функции gethostbyname(3), которая используется
для преобразования имен web-сайтов и их интернет-адреса, блокируется до возращения значения
(т.е. процесс вызвавший ее вынужден жать ответа). Т.к. есть всего один процесс squid,
то каждый, использующий его вынужден бы был ожидать каждый раз вызова функции. Вот почему
dnsserver - это отдельный процесс, этот процесс может быть блокирован не вызывая блокировки в squid.
Очень важно иметь достаточное кол-во процессов dnsserver, чтобы справиться с обработкой возможных запросов, в противном случае squid будет иногда останавливаться. Правило таково - вы должны убедится, что у вас указано не менее макс. необходимого вашей системе кол-ва процессов dnsserver, плюс еще два, чтобы обезопасить себя. Другими словами, если вы выдели не более 3-х используемых процесса dnsserver, то укажите как минимум пять. Помните, что dnsserver достаточно мал и будет закинут в своп, если не используется.
Прежде всего убедитесь, достаточно ли у вас запущенных процессов dnsserver, используя данные dns кеш-менеджера. В идеале вы должны увидеть большое кол-во запросов на первом dnsserver, второй должен быть загружен меньше, чем первый и т.д. Последний dnsserver должен обрабатывать всего несколько запросов. Если тенденции к уменьшению не наблюдается, то вам необходимо увеличить число dns_children в файле конфигурации. Если на последнем dnsserver запросов нет, то вы имеете достаточное их кол-во.
Другой фактор, влияющий на время обработки dnsserver - близость расположения вашего DNS-резолвера. Обычно мы не рекомендуем запускать Squid и named на одной и той же машине. Взамен этого попытайтесь использовать DNS-резолвер (named) с другого хоста, но из вашей же ЛВС. Если ваш DNS-трафик должен пройти через один или более маршрутизаторов, то это внесет вынужденные задержки.
Перед запуском конфигурационного скрипта просто установите переменную окружения CACHE_HTTP_PORT.
setenv CACHE_HTTP_PORT 8080
./configure
make
make install
При использовании версии Squid-1.1 НЕвозможно. Предполагается, что все cache_dir одинаковы. Директивой cache_swap устанавливается размер всех cache_dir, взятых вместе. Если у вас N-ное кол-во cache_dir, то каждая из них должна быть размером в cache_swap ÷ N Мегабайт.
Most people have a disk partition dedicated to the Squid cache. You don't want to use the entire partition size. Вам также потребуется оставить и некоторое дополнительное свободное место. В настоящее время Squid не больно толерантен к тому, что заканчивается свободное место на диске.
Допустим, что у вас есть диск размером в 9Гб. Помните, что производители дисков привирают относительно его доступного пространства. Так называемый 9GB-ный диск обычно имеет около 8.5GB пространства, пригодного к использованию. Прежде всего создайте на нем файловую систему и подмонтируйте ее. Теперь проверьте доступное пространство при помощи программы df. Обратите внимание, что вы потеряете некоторое кол-во дискового пространства, которое будет использовано на нужды файловой системы, т.к. суперблок, inodes и организацию директорий. Также имейте ввиду, что обычно Unix около 10% свободного пространства хранит для собственных нужд. Т.е. с 9Гб-ным диском у вас после форматирования останется около 8Гб.
Также я рекомендую выделять около 10% или более под собственные нужды и Squid и так называемый "буфер безопасности (safe buffer)". Squid обычно размещает файл swap.state в каждой директории с кешем. Его размер увеличивается, пока вы не перезапишите логи или не перезапустите Squid. Имейте ввиду, что Squid работает лучше, когда есть дополнительное свободное пространство. Если для вас важно качество работы, то выделите побольше дискового пространства. Обычно для диска в 9Гб, я рекомендую устанавливать значение cache_dir в диапазоне от 6000 до 7500 Мб:
cache_dir ... 7000 16 256
Лучше быть консервативным. После того, как кеш заполнится, посмотрите на используемое дисковое пространство. Если вы думаете, что не используется значительная часть дискового пространства, то немного увеличьте значение cache_dir.
Если вы получаете сообщение о ошибке ``disk full'', то то вам необходимо уменьшить размер вашего кеша.
Для Squid-1.1 да, вы потеряете содержимое вашего кеша. Это происходит из-за того, что версия 1.1 использует простейший алгоритм для распределения файлов между директориями кеша.
В Squid-2 вы не потеряете уже существующий кеш . Вы можете добавлять/удалять cache_dir-ры без нанесения вреда оставшимся из них.
Several people on both the fwtk-users and the squid-users mailing asked about using Squid in combination with http-gw from the TIS toolkit. The most elegant way in my opinion is to run an internal Squid caching proxyserver which handles client requests and let this server forward it's requests to the http-gw running on the firewall. Cache hits won't need to be handled by the firewall.
В этом примере Squid запущен на том же сервере что и http-gw, Squid использует порт 8000 и http-gw использует порт 8080 (web). Локальный домен - home.nl.
http-gw запускается демоном из /etc/rc.d/rc.local (Linux Slackware):
exec /usr/local/fwtk/http-gw -daemon 8080
или из inetd, примерно так:
web stream tcp nowait.100 root /usr/local/fwtk/http-gw http-gw
Я увеличил нижнюю границу до 100 т.к. большое кол-во людей столкнулись с проблемами
при запус5ке со сзначением по умолчанию.
Убедитесь, что у вас есть как минимум такая строка в /usr/local/etc/netperm-table:
http-gw: hosts 127.0.0.1
Вы должны добавить IP-адрес вашей собственной рабочей станции к этому правило и
убедиться, что http-gw работает:
http-gw: hosts 127.0.0.1 10.0.0.1
Важные настройки:
http_port 8000
icp_port 0
cache_host localhost.home.nl parent 8080 0 default
acl HOME dstdomain .home.nl
never_direct deny HOME
Это указывает Squid использовать родительский прокси для всех доменов кроме home.nl.
Ниже показан кусок access.log, демонстрирующий что получается если загрузить домашнюю страницу
Squid:
872739961.631 1566 10.0.0.21 ERR_CLIENT_ABORT/304 83 GET http://www.squid-cache.org/ - DEFAULT_PARENT/localhost.home.nl - 872739962.976 1266 10.0.0.21 TCP_CLIENT_REFRESH/304 88 GET http://www.nlanr.net/Images/cache_now.gif - DEFAULT_PARENT/localhost.home.nl - 872739963.007 1299 10.0.0.21 ERR_CLIENT_ABORT/304 83 GET http://www.squid-cache.org/Icons/squidnow.gif - DEFAULT_PARENT/localhost.home.nl - 872739963.061 1354 10.0.0.21 TCP_CLIENT_REFRESH/304 83 GET http://www.squid-cache.org/Icons/Squidlogo2.gif - DEFAULT_PARENT/localhost.home.nl
вывод http-gw в syslog:
Aug 28 02:46:00 memo http-gw[2052]: permit host=localhost/127.0.0.1 use of gateway (V2.0beta) Aug 28 02:46:00 memo http-gw[2052]: log host=localhost/127.0.0.1 protocol=HTTP cmd=dir dest=www.squid-cache.org path=/ Aug 28 02:46:01 memo http-gw[2052]: exit host=localhost/127.0.0.1 cmds=1 in=0 out=0 user=unauth duration=1 Aug 28 02:46:01 memo http-gw[2053]: permit host=localhost/127.0.0.1 use of gateway (V2.0beta) Aug 28 02:46:01 memo http-gw[2053]: log host=localhost/127.0.0.1 protocol=HTTP cmd=get dest=www.squid-cache.org path=/Icons/Squidlogo2.gif Aug 28 02:46:01 memo http-gw[2054]: permit host=localhost/127.0.0.1 use of gateway (V2.0beta) Aug 28 02:46:01 memo http-gw[2054]: log host=localhost/127.0.0.1 protocol=HTTP cmd=get dest=www.squid-cache.org path=/Icons/squidnow.gif Aug 28 02:46:01 memo http-gw[2055]: permit host=localhost/127.0.0.1 use of gateway (V2.0beta) Aug 28 02:46:01 memo http-gw[2055]: log host=localhost/127.0.0.1 protocol=HTTP cmd=get dest=www.nlanr.net path=/Images/cache_now.gif Aug 28 02:46:02 memo http-gw[2055]: exit host=localhost/127.0.0.1 cmds=1 in=0 out=0 user=unauth duration=1 Aug 28 02:46:03 memo http-gw[2053]: exit host=localhost/127.0.0.1 cmds=1 in=0 out=0 user=unauth duration=2 Aug 28 02:46:04 memo http-gw[2054]: exit host=localhost/127.0.0.1 cmds=1 in=0 out=0 user=unauth duration=3
Подведем итоги:
Преимущества:
Недостатки:
-- Rodney van den Oever
Когда используется прокси-кеш, сервер не "видит" соединения от реального клиента. Многие предпочитают организовывать контроль доступа основанный на адресе клиента. Чтобы приспособиться под подобных людей, Squid добавляет собственный заголовок под названием "X-Forwarded-For", который выглядит так:
X-Forwarded-For: 128.138.243.150, unknown, 192.52.106.30
Строка всегда содержит IP-адрес либо слово unknown, если адрес не
может быть определен, либо его отображение выключено при помощи конфигурационной
опции forwarded_for.
Мы должны обратить ваше внимание на то, что контроль доступа онованный на этом заголовке очень неэффективен и может быть запросто обойден. Любой клиент может внести в запрос любой IP-адрес вручную. Возможно по этой причине клиентский IP-адрес не описывается в спецификации HTTP/1.1.
Да, может, однако метод реализации этой возможности изменен по сравнению с ранними версиями Squid. В squid-2.2 представлен более гибкий метод. Следуйте инструкциям для используемой вами версии Squid. По умолчанию анонимайзер не используется.
Если вы решили использовать анонимайзер, то вам необходимо разобраться с опцией forwarded_for предотвращающей передачу адреса клиента. Отказ от устновки значения опции forwarded_for в "off" уменьшит эффективность анонимайзера. И наконец, если вы фильтруете заголовок User-Agent при помощи опции fake_user_agent, то это может предотвратить некоторые проблемы, возникающие у пользователей, т.к. некторые сайты требуют заголовка User-Agent.
Начиная с версии squid 2.2 анонимайзер стал более удобен в использовании. Теперь он позволяет точно указать какой из заголовков разрешено передавать.
Новый анонимайзер использует тег 'anonymize_headers'. Он имеет два режима - 'запрещающий' все и разрешающий определенные заголовки. Следующий пример симулирует работу старого параноидального режима.
anonymize_headers allow Allow Authorization Cache-Control
anonymize_headers allow Content-Encoding Content-Length
anonymize_headers allow Content-Type Date Expires Host
anonymize_headers allow If-Modified-Since Last-Modified
anonymize_headers allow Location Pragma Accept Charset
anonymize_headers allow Accept-Encoding Accept-Language
anonymize_headers allow Content-Language Mime-Version
anonymize_headers allow Retry-After Title Connection
anonymize_headers allow Proxy-Connection
Это предотвратит прохождение через прокси любых других заголовков, кроме указанных в списке.
Второй режим 'разрешает' все и запрещает определенные заголовки. Этот пример копирует работу старого режима standard.
anonymize_headers deny From Referer Server
anonymize_headers deny User-Agent WWW-Authenticate Link
Это разрешает прохождение всех заголовков, пока они не указаны в списке.
Вы не можете смешивать методы "allow" и "deny" в конфигурации squid, используйте либо один из них, либо другой !
Есть три режима: none, standard, and paranoid. Режим указывается при помощи конфигурационной опции http_anonymizer.
Без анонимизации (по умолчанию), Squid передает все заголовке запроса, полученного от клиента, запрашиваемому серверу (согласно обычным правилам HTTP).
В режиме standard, Squid фильтрует такие специфические заголовки в запросе:
В режиме paranoid, Squid разрешает только такие специфические заголовке в запросе:
Рекомендации: Анонимный WWW
Конечно, используйте список доступа в директиве always_direct.
К примеру, если вы хотите чтобы Squid соединялся напрямую с сервером hotmail.com, укажите такие строки в вашем файле конфигурации:
acl hotmail dstdomain .hotmail.com always_direct allow hotmail
Конечно, есть несколько способов сделать это.
acl all src 0/0
no_cache deny all
В Squid-2.4 и более поздних серсиях вы можете использовать модуль хранения ``null'':
cache_dir null /null
Вы можете установить глобальный праметр reply_body_max_size. Эта опция контролирует размер наибольшего тела HTTP-сообщения, которое будет послано кешем клиенту за один раз.
Если HTTP-ответ, пришедший от сервера содержит загловок Content-length, то
Squid сравнивает значение content-length и значение reply_body_max_size. Если content-length больше,
то соединение с сервером закрывается и клиент получает сообщение о ошибке от Squid-а.
Некоторые ответы не имеют заголовка Content-length. В этом случае Squid подсчитывает
сколько байт отдано клиенту. Как только лимит достигнут, клиентское соединение закрывается.
Заметьте, что ``креативные'' агенты смогут загружать большие файлы через кеш, используя HTTP/1.1 range requests.