Вперед Назад Содержание

4. Проблемы настройки

4.1 Как мне присоединится к иерархии кешей ?

Чтобы присоединить ваш кеш к иерархии, используйте директиву 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.

4.2 Как мне присоединится к иерархии NLANR?

У нас есть простая инструкция по подключению к иерархии кешей NLANR.

4.3 Почему я должен присоединяться к иерархии кешей NLANR ?

Иерархия NLANR обеспечивает вам первоисточник для обращения к родительскому или братскому кешу. Присоединение к глобальной системе кешей NLANR зачастую улучшают качество работы вашей службы кеширования.

4.4 Как мне зарегистрировать мой кеш в службе регистрации NLANR?

Просто включите следующую опция в вашем squid.conf и вы будете зарегистрированы:

        cache_announce 24
        announce_to sd.cache.nlanr.net:3131

ЗАМЕЧАНИЕ: анонсирование вашего кеша - не тоже самое, что присоединение к ирерархии кешей. Вы можете присоединится к иерархии NLANR и без регистрации, равно как вы можете зарегистрироваться в иерархии кешей NLANR без присоединения к ней.

4.5 Как мне найти ближайшие ко мне кеши, чтобы установить с ними родительские/дочерние/братские взаимодействия ?

Обратитесь к регистрационной базе данных кешей NLARN, чтобы найти ближайшие к вам кеши. Имейте ввиду, что наличие кеша в регистрационной базе данных вовсе не оазначает, что что он будет для вас родительским/братским/дочерним. Но ведь ничего не мешает поинтересоваться...

4.6 Регистрация моего кеша не появилась в базе данных Tracker.

4.7 Что такое режим httpd-акселератора ?

Пояснения перенесены в другую секцию.

4.8 Как мне настроить работу Squid за файерволом ?

Замечание: Информация, представленная здесь верна ядля версии 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

4.9 Как мне настроить в Squid перенаправление всех запросов на другой прокси ?

Замечание: Представленная здесь информация верна для версии 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-у сначала попробовать использовать родительский кеш.

4.10 У меня есть процессы dnsserver, которые не используются, нужно ли мне уменьшить их кол-во в squid.conf?

Процессы dnsserver используются squid потому-что вызов библиотечной функции gethostbyname(3), которая используется для преобразования имен web-сайтов и их интернет-адреса, блокируется до возращения значения (т.е. процесс вызвавший ее вынужден жать ответа). Т.к. есть всего один процесс squid, то каждый, использующий его вынужден бы был ожидать каждый раз вызова функции. Вот почему dnsserver - это отдельный процесс, этот процесс может быть блокирован не вызывая блокировки в squid.

Очень важно иметь достаточное кол-во процессов dnsserver, чтобы справиться с обработкой возможных запросов, в противном случае squid будет иногда останавливаться. Правило таково - вы должны убедится, что у вас указано не менее макс. необходимого вашей системе кол-ва процессов dnsserver, плюс еще два, чтобы обезопасить себя. Другими словами, если вы выдели не более 3-х используемых процесса dnsserver, то укажите как минимум пять. Помните, что dnsserver достаточно мал и будет закинут в своп, если не используется.

4.11 Среднее время обработки запроса моим dnsserver достаточно велико, как мне его уменьшить ?

Прежде всего убедитесь, достаточно ли у вас запущенных процессов dnsserver, используя данные dns кеш-менеджера. В идеале вы должны увидеть большое кол-во запросов на первом dnsserver, второй должен быть загружен меньше, чем первый и т.д. Последний dnsserver должен обрабатывать всего несколько запросов. Если тенденции к уменьшению не наблюдается, то вам необходимо увеличить число dns_children в файле конфигурации. Если на последнем dnsserver запросов нет, то вы имеете достаточное их кол-во.

Другой фактор, влияющий на время обработки dnsserver - близость расположения вашего DNS-резолвера. Обычно мы не рекомендуем запускать Squid и named на одной и той же машине. Взамен этого попытайтесь использовать DNS-резолвер (named) с другого хоста, но из вашей же ЛВС. Если ваш DNS-трафик должен пройти через один или более маршрутизаторов, то это внесет вынужденные задержки.

4.12 Каким самым простым способом я могу изменить HTTP-порт, установленный по умолчанию?

Перед запуском конфигурационного скрипта просто установите переменную окружения CACHE_HTTP_PORT.

        setenv CACHE_HTTP_PORT 8080
        ./configure
        make
        make install

4.13 Возможно ли контролировать насколько велика каждая из cache_dir?

При использовании версии Squid-1.1 НЕвозможно. Предполагается, что все cache_dir одинаковы. Директивой cache_swap устанавливается размер всех cache_dir, взятых вместе. Если у вас N-ное кол-во cache_dir, то каждая из них должна быть размером в cache_swap ÷ N Мегабайт.

4.14 Какой размер cache_dir должен использовать?

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'', то то вам необходимо уменьшить размер вашего кеша.

4.15 Я добавил новую cache_dir. Потеряю ли я свой кеш ?

Для Squid-1.1 да, вы потеряете содержимое вашего кеша. Это происходит из-за того, что версия 1.1 использует простейший алгоритм для распределения файлов между директориями кеша.

В Squid-2 вы не потеряете уже существующий кеш . Вы можете добавлять/удалять cache_dir-ры без нанесения вреда оставшимся из них.

4.16 Squid и http-gw из пакета TIS.

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

Настройка Squid:

Важные настройки:

        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

4.17 Что такое ``HTTP_X_FORWARDED_FOR''? Почему squid снабжает ним WWW-сервера и как мне это прекратить?

Когда используется прокси-кеш, сервер не "видит" соединения от реального клиента. Многие предпочитают организовывать контроль доступа основанный на адресе клиента. Чтобы приспособиться под подобных людей, 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.

4.18 Может ли Squid сделать анонимными HTTP-запросы?

Да, может, однако метод реализации этой возможности изменен по сравнению с ранними версиями Squid. В squid-2.2 представлен более гибкий метод. Следуйте инструкциям для используемой вами версии Squid. По умолчанию анонимайзер не используется.

Если вы решили использовать анонимайзер, то вам необходимо разобраться с опцией forwarded_for предотвращающей передачу адреса клиента. Отказ от устновки значения опции forwarded_for в "off" уменьшит эффективность анонимайзера. И наконец, если вы фильтруете заголовок User-Agent при помощи опции fake_user_agent, то это может предотвратить некоторые проблемы, возникающие у пользователей, т.к. некторые сайты требуют заголовка User-Agent.

Squid 2.2

Начиная с версии 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, используйте либо один из них, либо другой !

Squid 2.1 и более ранние версии

Есть три режима: none, standard, and paranoid. Режим указывается при помощи конфигурационной опции http_anonymizer.

Без анонимизации (по умолчанию), Squid передает все заголовке запроса, полученного от клиента, запрашиваемому серверу (согласно обычным правилам HTTP).

В режиме standard, Squid фильтрует такие специфические заголовки в запросе:

В режиме paranoid, Squid разрешает только такие специфические заголовке в запросе:

Рекомендации: Анонимный WWW

4.19 Могу ли я заставить Squid ходить напрямую на некоторые сайты?

Конечно, используйте список доступа в директиве always_direct.

К примеру, если вы хотите чтобы Squid соединялся напрямую с сервером hotmail.com, укажите такие строки в вашем файле конфигурации:

acl hotmail dstdomain .hotmail.com
always_direct allow hotmail

4.20 Могу ли я заставить Squid ходить напрямую на некоторые сайты?

Конечно, есть несколько способов сделать это.

        acl all src 0/0
        no_cache deny all

В Squid-2.4 и более поздних серсиях вы можете использовать модуль хранения ``null'':

        cache_dir null /null

4.21 Могу ли я предотвратить закачку больших файлов пользователями?

Вы можете установить глобальный праметр 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.


Вперед Назад Содержание