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








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

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

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

19. Squid версии 2

19.1 Какие новые возможности?

  • HTTP/1.1 - устойчивая подержка соединений.
  • Уменьшено использование VM: транзитные объекты полностью не хранятся в памяти.
  • Полностью независимые swap-директории.
  • Пользовательские сообщения о ошибках.
  • Встроенный FTP, больше нет ftpget.
  • Асинхронные операции с диском (опционально, требует библиотеку pthreads).
  • Встроенные иконки для директорий FTP и gopher.
  • Везде используется snprintf() вместо sprintf().
  • SNMP.
  • Поддержка URN
  • Запросы маршрутизации основанные на номерах AS.
  • Cache Digests
  • ...и многое другое!

19.2 Как мне теперь настроить 'ssl_proxy'?

По умолчанию Squid отправляет SSL-запросы напрямую к серверу. Но если вы должны направлять SSL-запросы через родительский прокси, прежде всего укажите Squid не устанавливать прямые соединения для SSL:

        acl SSL method CONNECT
        never_direct allow SSL
С такими установками Squid должен использовать один из ваших родительских кешей для SSL-запросов. Если вы хотите, чтобы он выбирал определенный родительский кеш, вы должны использовать опцию cache_peer_access:
        cache_peer parent1 parent 3128 3130
        cache_peer parent2 parent 3128 3130
        cache_peer_access parent2 allow !SSL
Строки выше указывают Squid НЕ использовать parent2 для SSL, поэтому всегда должен использоваться parent1.

19.3 Logfile rotation doesn't work with Async I/O

Это известное органичение при использовании Async I/O в Linux. Linux Threads package перехватывает (использует внутренне) сигнал SIGUSR1, который squid использует для ротации логов.

Чтобы не нарушать работу SIGUSR1, выключайте его в Squid, когда треды включены в Linux.

19.4 Добавление нового диска для кеша

Просто добавьте новую строку cache_dir в ваш squid.conf, затем снова запустите squid -z. Squid создаст swap-директории на новом разделе а существующие оставит на прежнем месте.

19.5 Squid 2 performs badly on Linux

от Henrik Nordstrom

Вы можете включить асинхронный I/O при помощи опции --enable-async-io. Будьте осторожны при использовании тредов в Linux. Большинство версий libc5 и очень ранние версии glibc имеют проблемы при работы с тредовыми приложениями. Я бы не рекомендовал использовать --enable-async-io на Linux пока ваша система использует glibc 2.1.3 или более позние.

Вам также необходимо знать, что --enable-async-io не оптимальное решение, если ваш кеш очень загружен. Для снижения нагрузки кеш лучше запускать без поддержки --enable-async-io.

Попробуйтие пересобрать Squid без ключа --enable-async-io. Если нетредовый Squid работает лучше, то возможно ваша libc не поддерживает корректную обработку тредов. (не забывайте сделать "make clean" после запуска configure)

19.6 Как мне настроить proxy authentication в Squid-2?

Для Squid-2 реализация и настройка была измененна. Аутентификация теперь поддерживается через внешний процесс. Страница Arjan-а proxy auth page описывает как это установить. Также ниже даются некоторые простые инструкции по этому поводу.

  1. Мы предполагаем, что вы описали ACL с proxy_auth, к примеру:
            acl foo proxy_auth REQUIRED
            http_access allow foo
    
  2. Вам необходимо откомпилировать и установить внешнюю программу аутентификации. Большинство людей пожелают использовать ncsa_auth. Исходные тексты этой программы расположены в директории auth_modules/NCSA исходников дистрибутива.
            % cd auth_modules/NCSA
            % make
            % make install
    
    Теперь вы должны получить программу ncsa_auth в той же самой директории, где лежат бинарники вашего squid.
  3. Вам необходимо создать файл паролей. Если вы раньше использовали прокси-аутентификацию вы возможно уже имеете такой файл. Можете загрузить apache's htpasswd program с нашего сервера. Выберите путь к вашему файлу паролей. Предлоложим вы хотите разместить этот файл в той же директории что и squid.conf.
  4. Укажите внешний аутентификатор в squid.conf. Для ncsa_auth вам необходимо указать путь к исполняемому файлу и файл паролей как аргумент. К примеру:
            authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
    

После всего этого вы можете запускать Squid. Если мы что-то упустили из виду или что-то проходит негладко, дайте нам знать на squid-faq@squid-cache.org.

19.7 Почему proxy-auth отвергает всех пользователей в Squid-2.2?

Форма ACL для прокси-аутентификации была изменена с:

        acl foo proxy_auth timeout
на:
        acl foo proxy_auth username
Обновите ваш ACL appropriately - a username of REQUIRED will permit all valid usernames. Таймаут теперь указывается при помощи опции:
        authenticate_ttl timeout

19.8 Delay Pools

от David Luyer.

Информация представленная здесь верна для версии 2.2. Настоятельно рекомендуется использовать как минимум версию Squid 2.2, если вы хотите пременять delay pools.

Delay pools предосталвяет способ органичения ширины полосы пропускания для определенных запросов на основе любого списка критериев. The idea came from a Western Australian university who wanted to restrict student traffic costs (without affecting staff traffic, and still getting cache and local peering hits at full speed). There was some early Squid 1.0 code by Central Network Services at Murdoch University, which I then developed (at the University of Western Australia) into a much more complex patch for Squid 1.0 called ``DELAY_HACK.'' I then tried to code it in a much cleaner style and with slightly more generic options than I personally needed, and called this ``delay pools'' in Squid 2. I almost completely recoded this in Squid 2.2 to provide the greater flexibility requested by people using the feature.

Чтобы delay pools заработал в Squid 2.2, вам необходимо использовать опцию --enable-delay-pools в configure перед компиляцией.

Терминология для этой секции FAQ:

pool

набор групп ведер соответсвующий данному классу

bucket group

a group of buckets within a pool, such as the per-host bucket group, the per-network bucket group or the aggregate bucket group (the aggregate bucket group is actually a single bucket)

bucket

an individual delay bucket represents a traffic allocation which is replenished at a given rate (up to a given limit) and causes traffic to be delayed when empty

class

the class of a delay pool determines how the delay is applied, ie, whether the different client IPs are treated seperately or as a group (or both)

class 1

класс 1 для delay pool contains a single unified bucket, которые применяются для всех запросов с хоста, указанного в пуле.

class 2

a class 2 delay pool contains one unified bucket and 255 buckets, one for each host on an 8-bit network (IPv4 class C)

class 3

contains 255 buckets for the subnets in a 16-bit network, and individual buckets for every host on these networks (IPv4 class B)

Delay pools позволяет органичивать трафик для клиентов или групп клиентов различными способами:

  • can specify peer hosts which aren't affected by delay pools, ie, local peering or other 'free' traffic (with the no-delay peer option).
  • delay behavior is selected by ACLs (low and high priority traffic, staff vs students or student vs authenticated student or so on).
  • each group of users has a number of buckets, a bucket has an amount coming into it in a second and a maximum amount it can grow to; when it reaches zero, objects reads are deferred until one of the object's clients has some traffic allowance.
  • any number of pools can be configured with a given class and any set of limits within the pools can be disabled, for example you might only want to use the aggregate and per-host bucket groups of class 3, not the per-network one.

This allows options such as creating a number of class 1 delay pools and allowing a certain amount of bandwidth to given object types (by using URL regular expressions or similar), and many other uses I'm sure I haven't even though of beyond the original fair balancing of a relatively small traffic allocation across a large number of users.

Есть некоторые органичения для delay pools:

  • delay pools are incompatible with slow aborts; quick abort should be set fairly low to prevent objects being retrived at full speed once there are no clients requesting them (as the traffic allocation is based on the current clients, and when there are no clients attached to the object there is no way to determine the traffic allocation).
  • delay pools only limits the actual data transferred and is not inclusive of overheads such as TCP overheads, ICP, DNS, icmp pings, etc.
  • it is possible for one connection or a small number of connections to take all the bandwidth from a given bucket and the other connections to be starved completely, which can be a major problem if there are a number of large objects being transferred and the parameters are set in a way that a few large objects will cause all clients to be starved (potentially fixed by a currently experimental patch).

Как я могу ограничить общую ширину канала для Squid скажем в, 512 Kbps?

        acl all src 0.0.0.0/0.0.0.0             # мог уже быть определен
        delay_pools 1
        delay_class 1 1
        delay_access 1 allow all
        delay_parameters 1 64000/64000          # 512 kbits == 64 kbytes per second

Для пояснений указаных директив смотрите файл конфигурации.

The 1 second buffer (max = restore = 64kbytes/sec) is because a limit is requested, and no responsiveness to a busrt is requested. If you want it to be able to respond to a burst, increase the aggregate_max to a larger value, and traffic bursts will be handled. Рекомендуется, чтобы максимальное значение было как минимум в два раза больше значения restore - if there is only a single object being downloaded, sometimes the download rate will fall below the requested throughput as the bucket is not empty when it comes to be replenished.

Как ограничить еденичное соединение до 128 Кб/сек?

Вы не можете органичить скорость еденичного HTTP-запроса. Вы можете органичить определенный хост на некоторую полосу пропускания. Чтобы ограничить определенный хост, создайте acl для этого хоста, используя пример, приведенный выше. Чтобы органичить группу хостов, вы должны указать delay pool класса 2 или 3. К примеру:

        acl only128kusers src 192.168.1.0/255.255.192.0
        acl all src 0.0.0.0/0.0.0.0
        delay_pools 1
        delay_class 1 3
        delay_access 1 allow only128kusers
        delay_access 1 deny all
        delay_parameters 1 64000/64000 -1/-1 16000/64000

Для пояснений указаных директив смотрите файл конфигурации.

Представленное выше решение описывает кеш, оперирующий каналом в 512кбит/с, но каждый IP-адрес получает только 128кбит/с.

Как вы персонифицируете использование delay pools?

У нас есть шесть локальных кешей, все они используют опции 'proxy-only no-delay' т.к. это быстрые машины, соединенные посредством сети fast ethernet и сети microwave (ATM).

Для локального доступа мы используем ACL dstdomain и b for delay pool exceptions we use a dst ACL as well since the delay pool ACL processing is done using "fast lookups", which means (among other things) it won't wait for a DNS lookup if it would need one.

Наш прокси имеет два виртуальных интерфейса, один из которых используется для аутентификации соединений машин из отдела не оплачивающего траффик, а второй используется для delay pools. Итак, пользователям основной Unix-системы разрешено выбирать между быстрым и медленным трафиком, но необходимо платить за любой их трафик при использовании быстрого кеша. Запросы идентификации отключены при доступе через медленный кеш за ненадобностью. Медленные соединения задерживаются с использованием delay pool класса 3, чтобы разделять как отделы так и пользователей. Мы распознаем пользователей Lynx на главном хосте и группируем их в один delay bucket, т.к. они в основном просматривают текстовые страницы и врядли будут источником проблем. Если бы это произошло, то мы могли бы поместить эти хосты в delay pool класса 1, чтобы усилить структурирование.

I prefer using a slow restore rate and a large maximum rate to give preference to people who are looking at web pages as their individual bucket fills while they are reading, and those downloading large objects are disadvantaged. This depends on which clients you believe are more important. Also, one individual 8 bit network (a residential college) have paid extra to get more bandwidth.

Вот соответствующая часть моего конфига (IP-адреса и т.п. изменены):

        # ACL definitions
        # Local network definitions, domains a.net, b.net
        acl LOCAL-NET dstdomain a.net b.net
        # Local network; nets 64 - 127.  Also nearby network class A, 10.
        acl LOCAL-IP dst 192.168.64.0/255.255.192.0 10.0.0.0/255.0.0.0
        # Virtual i/f used for slow access
        acl virtual_slowcache myip 192.168.100.13/255.255.255.255
        # All permitted slow access, nets 96 - 127
        acl slownets src 192.168.96.0/255.255.224.0
        # Special 'fast' slow access, net 123
        acl fast_slow src 192.168.123.0/255.255.255.0
        # User hosts
        acl my_user_hosts src 192.168.100.2/255.255.255.254
        # "All" ACL
        acl all src 0.0.0.0/0.0.0.0

        # Don't need ident lookups for billing on (free) slow cache
        ident_lookup_access allow my_user_hosts !virtual_slowcache
        ident_lookup_access deny all

        # Security access checks
        http_access [...]

        # These people get in for slow cache access
        http_access allow virtual_slowcache slownets
        http_access deny virtual_slowcache

        # Access checks for main cache
        http_access [...]

        # Delay definitions (read config file for clarification)
        delay_pools 2
        delay_initial_bucket_level 50

        delay_class 1 3
        delay_access 1 allow virtual_slowcache !LOCAL-NET !LOCAL-IP !fast_slow
        delay_access 1 deny all
        delay_parameters 1 8192/131072 1024/65536 256/32768

        delay_class 2 2
        delay_access 2 allow virtual_slowcache !LOCAL-NET !LOCAL-IP fast_slow
        delay_access 2 deny all
        delay_parameters 2 2048/65536 512/32768

Те же самые настройки применяются для некоторых отделов использующих delay pools класса 2, чтобы позволить им более гибко управлять доступом для различных лабораторий и студентов.

Где еще я могу найти информацию о delay pools?

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

# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)
# -----------------------------------------------------------------------------

#  TAG: delay_pools
#       This represents the number of delay pools to be used.  For example,
#       if you have one class 2 delay pool and one class 3 delays pool, you
#       have a total of 2 delay pools.
#
#       To enable this option, you must use --enable-delay-pools with the
#       configure script.
#delay_pools 0

#  TAG: delay_class
#       This defines the class of each delay pool.  There must be exactly one
#       delay_class line for each delay pool.  For example, to define two
#       delay pools, one of class 2 and one of class 3, the settings above
#       and here would be:
#
#delay_pools 2      # 2 delay pools
#delay_class 1 2    # pool 1 is a class 2 pool
#delay_class 2 3    # pool 2 is a class 3 pool
#
#       The delay pool classes are:
#
#               class 1         Everything is limited by a single aggregate
#                               bucket.
#
#               class 2         Everything is limited by a single aggregate
#                               bucket as well as an "individual" bucket chosen
#                               from bits 25 through 32 of the IP address.
#
#               class 3         Everything is limited by a single aggregate
#                               bucket as well as a "network" bucket chosen
#                               from bits 17 through 24 of the IP address and a
#                               "individual" bucket chosen from bits 17 through
#                               32 of the IP address.
#
#       NOTE: If an IP address is a.b.c.d
#               -> bits 25 through 32 are "d"
#               -> bits 17 through 24 are "c"
#               -> bits 17 through 32 are "c * 256 + d"

#  TAG: delay_access
#       This is used to determine which delay pool a request falls into.
#       The first matched delay pool is always used, ie, if a request falls
#       into delay pool number one, no more delay are checked, otherwise the
#       rest are checked in order of their delay pool number until they have
#       all been checked.  For example, if you want some_big_clients in delay
#       pool 1 and lotsa_little_clients in delay pool 2:
#
#delay_access 1 allow some_big_clients
#delay_access 1 deny all
#delay_access 2 allow lotsa_little_clients
#delay_access 2 deny all

#  TAG: delay_parameters
#       This defines the parameters for a delay pool.  Each delay pool has
#       a number of "buckets" associated with it, as explained in the
#       description of delay_class.  For a class 1 delay pool, the syntax is:
#
#delay_parameters pool aggregate
#
#       For a class 2 delay pool:
#
#delay_parameters pool aggregate individual
#
#       For a class 3 delay pool:
#
#delay_parameters pool aggregate network individual
#
#       The variables here are:
#
#               pool            a pool number - ie, a number between 1 and the
#                               number specified in delay_pools as used in
#                               delay_class lines.
#
#               aggregate       the "delay parameters" for the aggregate bucket
#                               (class 1, 2, 3).
#
#               individual      the "delay parameters" for the individual
#                               buckets (class 2, 3).
#
#               network         the "delay parameters" for the network buckets
#                               (class 3).
#
#       A pair of delay parameters is written restore/maximum, where restore is
#       the number of bytes (not bits - modem and network speeds are usually
#       quoted in bits) per second placed into the bucket, and maximum is the
#       maximum number of bytes which can be in the bucket at any time.
#
#       For example, if delay pool number 1 is a class 2 delay pool as in the
#       above example, and is being used to strictly limit each host to 64kbps
#       (plus overheads), with no overall limit, the line is:
#
#delay_parameters 1 -1/-1 8000/8000
#
#       Note that the figure -1 is used to represent "unlimited".
#
#       And, if delay pool number 2 is a class 3 delay pool as in the above
#       example, and you want to limit it to a total of 256kbps (strict limit)
#       with each 8-bit network permitted 64kbps (strict limit) and each
#       individual host permitted 4800bps with a bucket maximum size of 64kb
#       to permit a decent web page to be downloaded at a decent speed
#       (if the network is not being limited due to overuse) but slow down
#       large downloads more significantly:
#
#delay_parameters 2 32000/32000 8000/8000 600/64000
#
#       There must be one delay_parameters line for each delay pool.

#  TAG: delay_initial_bucket_level      (percent, 0-100)
#       The initial bucket percentage is used to determine how much is put
#       in each bucket when squid starts, is reconfigured, or first notices
#       a host accessing it (in class 2 and class 3, individual hosts and
#       networks only have buckets associated with them once they have been
#       "seen" by squid).
#
#delay_initial_bucket_level 50

19.9 Могу ли я сохранить мой кеш при обновлении с версии 1.1 до 2?

На данный момент мы не имеем скрипта, который бы отконвертировал содержимое вашего кеша в формат Squid-2. Если так много людей спрашивают об этом, то возможно кто-нибудь уже написал подобный скрипт.

По желанию, вы можете настроить ваш новый Squid-2, чтобы он работал со старым Squid-1.1 в режиме sibling. После нескольких дней, недель, или сколько вы там захотите ждать, остановите старый Squid. Если вы хотите принудительно поместить объекты из вашего старого кеша в новый, можете сделать что-нибудь типа:

  1. Установить Squid-2 и указать для него такое же количество дискового простарнства как и для кеша Squid-1 даже если в данный момент нет такого количеста свободного места.
  2. Указать для Squid-2 Squid-1 как родительский кеш. Вы можете включить опцию never_direct в Squid-2 для того, чтобы пропустить все запросы со Squid-2 через Squid-1.
  3. Включить PURGE method на Squid-1.
  4. Установить очень либеральные правила обновения на Squid-1, чтобы не генерировать IMS-запросы для кешированых объектов.
  5. Создать список всех URL-лов в кеше Squid-1. Можно получить из access.log, store.log и swap logs.
  6. Для каждого URL в списке сделать запрос от Squid-2 и далее немедленно послать запрос PURGE на Squid-1.
  7. В конечном итоге Squid-2 получит все объекты, а в Squid-1 не останется ничего.

19.10 Пользовательские сообщения о ошибках

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

        --enable-err-language=lang

Также вы можете исправить шаблон сообщения о ошибке так как вам нравится. Этот список описывает теги, которые Squid будет вставлять в сообщения:

%B

URL with FTP %2f hack

%c

код ошибки Squid

%d

время в секундах с момента получения запроса

%e

errno

%E

strerror()

%f

FTP строка запроса

%F

FTP строка ответа

%g

FTP сообщение сервера

%h

имя хоста кеша

%H

имя сервера

%i

клиентский IP

%I

серверный IP

%L

содержание err_html_text конфигурационной опции

%M

метод запроса

%p

порт URL \#

%P

протокол

%R

полный HTTP-запрос

%S

подпись squid из ERR_SIGNATURE

%s

описание кеша с версией

%t

локальное время

%T

UTC

%U

URL без пароля

%u

URL без пароля, %2f добавлено в путь

%w

cachemgr email-адрес

%z

сообщение о ошибке сервера dns

19.11 Мой squid.conf от версии 1.1 не работает!

Да, несколько конфигурационных директив были переименованы. Вот некоторые из них:

cache_host

Теперь это называется cache_peer. Старое название неточно описывало, что вы именно настраиваете, новое говорит вам, что вы настраиваете братский кеш для вашего кеша.

cache_host_domain

Переимновано в cache_peer_domain.

local_ip, local_domain

Фунциональныевозможности этих директив теперь реализованы при помощи acl. Вам необходимо использовать опции always_direct и never_direct. В новом файле squid.conf есть несколько примеров.

cache_stoplist

Эта директива также теперь использует acl. Вам необходимо использовать опцию no_cache. К примеру:

        acl Uncachable url_regex cgi ?
        no_cache deny Uncachable
        
cache_swap

Эта опция определяет размер кеша на диске. Теперь вы можете указать размер для каждой строки cache_dir.

cache_host_acl

Опция была переименована в cache_peer_access и был изменен ее синтаксис. Теперь эта опция - настоящий acl и вы должны использовать ключевые слова allow или deny. К примеру:

        acl that-AS dst_as 1241
        cache_peer_access thatcache.thatdomain.net allow that-AS
        cache_peer_access thatcache.thatdomain.net deny all
        
В этом примере запросы посылаются на ваш братский кеш thatcache.thatdomain.net только для серверов из автономной системы N 1241.
units

В Squid-1.1 большое количество опций конфиуграции предполагали единицы измерения ассоцицированные с ними. К примеру, значение connect_timeout могло быть в секундах, но значение read_timeout могло быть указано в минутах . Для Squid-2 в этих директивах указываются еденицы измерения после значения и вы получите предупреждение, если этого не указать. К примеру, вы теперь должны писать:

        connect_timeout 120 seconds
        read_timeout 15 minutes
        


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