Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

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

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

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

To place your cache in a hierarchy, use the cache_host directive in squid.conf to specify the parent and sibling nodes.

For example, the following squid.conf file on childcache.example.com configures its cache to retrieve data from one parent cache and two sibling caches:

        #  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

The cache_host_domain directive allows you to specify that certain caches siblings or parents for certain domains:

        #  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

The configuration above indicates that the cache will use pb.cache.nlanr.net and it.cache.nlanr.net for domains uk, de, fr, no, se and it, sd.cache.nlanr.net for domains mx, za, mu and zm, and cache1.nzgate.net.nz for domains au, aq, fj, and nz.

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

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

4.3 Why should I want to join NLANR's cache hierarchy?

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

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

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

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

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

4.5 How do I find other caches close to me and arrange parent/child/sibling relationships with them?

Visit the NLANR cache registration database to discover other caches near you. Keep in mind that just because a cache is registered in the database does not mean they are willing to be your parent/sibling/child. But it can't hurt to ask...

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

  • Вы не увидите вашего сайта в списке, если для IP-адреса вашего кеша нет записи DNS PTR. Если мы не можем отобратиз IP-адрес в доменное имя, то он будет показан как ``Unknown.''
  • Сообщения о регистрации посылаются по UDP. Возможно, что мы не получили вашего сообщения с анонсом из-за файервола блокирующего UDP или из-за того, что пакет был отброшен по причине загрузки канала.

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 I have dnsserver processes that aren't being used, should I lower the number in squid.conf?

The dnsserver processes are used by squid because the gethostbyname(3) library routines used to convert web sites names to their internet addresses blocks until the function returns (i.e., the process that calls it has to wait for a reply). Since there is only one squid process, everyone who uses the cache would have to wait each time the routine was called. This is why the dnsserver is a separate process, so that these processes can block, without causing blocking in squid.

It's very important that there are enough dnsserver processes to cope with every access you will need, otherwise squid will stop occasionally. A good rule of thumb is to make sure you have at least the maximum number of dnsservers squid has ever needed on your system, and probably add two to be on the safe side. In other words, if you have only ever seen at most three dnsserver processes in use, make at least five. Remember that a dnsserver is small and, if unused, will be swapped out.

4.11 My dnsserver average/median service time seems high, how can I reduce it?

First, find out if you have enough dnsserver processes running by looking at the Cachemanager dns output. Ideally, you should see that the first dnsserver handles a lot of requests, the second one less than the first, etc. The last dnsserver should have serviced relatively few requests. If there is not an obvious decreasing trend, then you need to increase the number of dns_children in the configuration file. If the last dnsserver has zero requests, then you definately have enough.

Another factor which affects the dnsserver service time is the proximity of your DNS resolver. Normally we do not recommend running Squid and named on the same host. Instead you should try use a DNS resolver (named) on a different host, but on the same LAN. If your DNS traffic must pass through one or more routers, this could be causing unnecessary delays.

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. You have to leave some extra room. Currently, Squid is not very tolerant of running out of disk space.

Lets say you have a 9GB disk. Remember that disk manufacturers lie about the space available. A so-called 9GB disk usually results in about 8.5GB of raw, usable space. First, put a filesystem on it, and mount it. Then check the ``available space'' with your df program. Note that you lose some disk space to filesystem overheads, like superblocks, inodes, and directory entries. Also note that Unix normally keeps 10% free for itself. So with a 9GB disk, you're probably down to about 8GB after formatting.

Next, I suggest taking off another 10% or so for Squid overheads, and a "safe buffer." Squid normally puts its swap.state files in each cache directory. These grow in size until you rotate the logs, or restart squid. Also note that Squid performs better when there is more free space. So if performance is important to you, then take off even more space. Typically, for a 9GB disk, I recommend a cache_dir setting of 6000 to 7500 Megabytes:

cache_dir ... 7000 16 256

Its better to start out conservative. After the cache becomes full, look at the disk usage. If you think there is plenty of unused space, then increase the cache_dir setting a little.

If you're getting ``disk full'' write errors, then you definately need to decrease your cache size.

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.

In this example Squid runs on the same server as the http-gw, Squid uses 8000 and http-gw uses 8080 (web). The local domain is home.nl.

Firewall configuration:

Either run http-gw as a daemon from the /etc/rc.d/rc.local (Linux Slackware):

        exec /usr/local/fwtk/http-gw -daemon 8080
or run it from inetd like this:
        web stream      tcp      nowait.100  root /usr/local/fwtk/http-gw http-gw
I increased the watermark to 100 because a lot of people run into problems with the default value.

Make sure you have at least the following line in /usr/local/etc/netperm-table:

        http-gw:        hosts 127.0.0.1
You could add the IP-address of your own workstation to this rule and make sure the http-gw by itself works, like:
        http-gw:                hosts 127.0.0.1 10.0.0.1

Squid configuration:

The following settings are important:

        http_port       8000
        icp_port        0

        cache_host      localhost.home.nl parent 8080 0 default
        acl HOME        dstdomain .home.nl
        never_direct    deny HOME
This tells Squid to use the parent for all domains other than home.nl. Below, access.log entries show what happens if you do a reload on the Squid-homepage:

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 entries in 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

To summarize:

Advantages:

  • http-gw allows you to selectively block ActiveX and Java, and it's primary design goal is security.
  • The firewall doesn't need to run large applications like Squid.
  • The internal Squid-server still gives you the benefit of caching.

Disadvantages:

  • The internal Squid proxyserver can't (and shouldn't) work with other parent or neighbor caches.
  • Initial requests are slower because these go through http-gw, http-gw also does reverse lookups. Run a nameserver on the firewall or use an internal nameserver.

-- Rodney van den Oever

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

When a proxy-cache is used, a server does not see the connection coming from the originating client. Many people like to implement access controls based on the client address. To accommodate these people, Squid adds its own request header called "X-Forwarded-For" which looks like this:

        X-Forwarded-For: 128.138.243.150, unknown, 192.52.106.30
Entries are always IP addresses, or the word unknown if the address could not be determined or if it has been disabled with the forwarded_for configuration option.

We must note that access controls based on this header are extremely weak and simple to fake. Anyone may hand-enter a request with any IP address whatsoever. This is perhaps the reason why client IP addresses have been omitted from the HTTP/1.1 specification.

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

Yes it can, however the way of doing it has changed from earlier versions of squid. As of squid-2.2 a more customisable method has been introduced. Please follow the instructions for the version of squid that you are using. As a default, no anonymizing is done.

If you choose to use the anonymizer you might wish to investigate the forwarded_for option to prevent the client address being disclosed. Failure to turn off the forwarded_for option will reduce the effectiveness of the anonymizer. Finally if you filter the User-Agent header using the fake_user_agent option can prevent some user problems as some sites require the User-Agent header.

Squid 2.2

With the introduction of squid 2.2 the anonoymizer has become more customisable. It now allows specification of exactly which headers will be allowed to pass.

The new anonymizer uses the 'anonymize_headers' tag. It has two modes 'deny' all and allow the specified headers. The following example will simulate the old paranoid mode.

               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

This will prevent any headers other than those listed from being passed by the proxy.

The second mode is 'allow' all and deny the specified headers. The example replicates the old standard mode.

               anonymize_headers deny From Referer Server
               anonymize_headers deny User-Agent WWW-Authenticate Link

It allows all headers to pass unless they are listed.

You can not mix allow and deny in a squid configuration it is either one or the other!

Squid 2.1 and Earlier

There are three modes: none, standard, and paranoid. The mode is set with the http_anonymizer configuration option.

With no anonymizing (the default), Squid forwards all request headers as received from the client, to the origin server (subject to the regular rules of HTTP).

In the standard mode, Squid filters out the following specific request headers:

  • From:
  • Referer:
  • Server:
  • User-Agent:
  • WWW-Authenticate:
  • Link:

In the paranoid mode, Squid allows only the following specific request headers:

  • Allow:
  • Authorization:
  • Cache-Control:
  • Content-Encoding:
  • Content-Length:
  • Content-Type:
  • Date:
  • Expires:
  • Host:
  • If-Modified-Since:
  • Last-Modified:
  • Location:
  • Pragma:
  • Accept:
  • Accept-Charset:
  • Accept-Encoding:
  • Accept-Language:
  • Content-Language:
  • Mime-Version:
  • Retry-After:
  • Title:
  • Connection:
  • Proxy-Connection:

References: Anonymous WWW

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

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

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

acl hotmail dstdomain .hotmail.com
always_direct allow hotmail

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

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

Вы можете использовать список доступа в директиве no_cache, чтобы заставить 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.


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