3 кнопки, котоpые потpясли DOS.

Unix Dos Linux Windows Os/2 Qnx Beos Gios Hard Etc Link Форум (тестовый режим) Гостевая Юмор Soft Связь
 
 
 

Etc.: Proxy сервер под Linux. Squid

Содержание

Назначение

Представляет собой HTTP, FTP, gopher, SSL и WAIS proxy, кеширующий запросы. Также кеширует DNS. Один процесс на всех, неблокированный ввод/вывод, держит часто используемые объекты в виртуальной памяти. Бесплатен (GPL). Основан на проекте Harvest. Поддерживает иерархию или сеть серверов (ICP/UDP - Internet Cache Protocol, HTCP/TCP, multicast). Откуда брать объект определяется так (в упрощенном виде): послать ICP/HTCP/multicast запросы ко всем подходящим соседям; подождать определенное время; загрузить с первого соседа, пославшего HIT; иначе загрузить с первого отца, ответившего MISS; иначе загрузить с первоисточника. Предусмотрены различные методы оптимизации для выбора наиболее быстрого источника.

Делается различие между частными и общими объектами. Кешируются только общие объекты. Только метод GET дает общие объекты. Объекты, попавшие в стоп-лист есть частные объекты. Если запрос содержит аутентификационную информацию или ответ типа "401 Unauthorized" - это частный объект.

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

Текущая стабильная версия: Squid 2.4-STABLE6; готовится к выходу 2.5 (отличия 2.5 от 2.4, 2.4 от 2.3, 2.3 от 2.2).


 

Полезные ключи ./configure (--help)

  • --prefix=/usr/local/squid (куда инсталлировать файлы, также имеется множество дополнительных ключей для тонкой настройки расположения файлов)

  • --enable-async-io=число-нитей (гм.. async-io в Linux? Хотя говорят, что в 2.4 заработало)

  • --enable-storeio="список-методов-хранения" (ufs - unix file system; aufs - async unix file system; diskd - отдельные процессы для асинхронного доступа к файлам; null - не хранить данные на диске; coss - файловая система COSS)

  • --enable-truncate (обнулять файлы вместо их удаления: быстрее, но требует много inode; были проблемы, когда переполнялась таблица inode; наверное, параметр minimum_object_size из-за этого появился; не рекомендуется для асинхронного ввода/вывода)

  • --disable-unlinkd (запретить использование внешних процессов для удаления файлов)

  • --enable-icmp (измерять путь до каждого HTTP-сервера при запросах с помощью ICMP, используется для оптимизации выбора сервера или соседа)

  • --enable-htcp (HTCP - вариант ICP по TCP, синхронизация кеша с соседями)

  • --enable-forw-via-db (включить поддержку БД Forw/Via для оптимизации выбора сервера или соседа)

  • --enable-cache-digests (использовать Cache Digests для оптимизации выбора сервера или соседа)

  • --enable-carp (Enable CARP support, cache ... routing protocol)

  • --disable-wccp (не включать поддержку протокола WCCP - Web Cache Coordination Protocol - позволяет Cisco IOS автоматически распознавать падение сервера)

  • --enable-delay-pools (управление ограничением трафика)

  • --enable-useragent-log (журнализовать заголовок Useragent)

  • --enable-referer-log (журнализовать заголовок Referer)

  • --enable-kill-parent-hack (помогает сделать shutdown чисто)

  • --enable-snmp (Enable SNMP monitoring)

  • --enable-arp-acl (ether address ACL)

  • --enable-cachemgr-hostname=имя-хоста (cachemgr.cgi будет по умолчанию натравлен на этот хост)

  • --enable-err-language=языки-для-сообщений-об-ошибках (по умолчанию - все)

  • --enable-default-err-language=язык-сообщений-об-ошибках

  • --enable-gnuregex (вместо regex, плохо работающего в Linux)

  • --enable-poll (можно использовать poll или select; poll быстрее, но не на всех платформах работает; обычно выбор делается автоматически, но если вы умнее configure...)

  • --disable-poll

  • --disable-http-violations (игнорировать все строки в конфигурации, которые нарушают стандарты HTTP)

  • --enable-ipf-transparent (разрешить поддержку transparent proxy для систем, использующих IP-Filter - в ядре Linux 2.2 и без этого хорошо)

  • --enable-pf-transparent (разрешить поддержку transparent proxy для систем, использующих PF network address redirection)

  • --enable-linux-netfilter (transparent proxy для ядра Linux 2.4)

  • --disable-ident-lookups (ident в современном мире - вещь бесполезная)

  • --disable-internal-dns (вместо внутренних запросов использовать внешние процессы dnsserver; рекомендуется для версий до 2.4)

  • --enable-underscores (позволять подчеркивания в именах хостов, надеясь что резолвер их не обрежет)

  • --enable-heap-replacement (использовать улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid до 2.4)

  • --enable-removal-policies="lru,heap" (улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid 2.4 и выше)

  • --enable-dlmalloc (своя библиотека malloc, не быстрая но без memore leak)

  • --enable-ssl (включить поддержку работы в качестве шлюза SSL с помощью OpenSSL)

  • --enable-auth="список методов авторизации" (basic, digest, ntlm; имеется множество дополнительных ключей, позволяющих настраивать методы авторизации: getpwnam, LDAP, multi-domain-NTLM, PAM, SMB, MSNT, NCSA, SASL, YP, )

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

  • -a порт (TCP порт для входных HTTP запросов, 3128)

  • -d (отладка на stderr)

  • -f имя-файла-конфигурации

  • -h (help)

  • -k

    • reconfigure (посылка сигнала HUP)

    • rotate (rotate журналы; сигнал USR1)

    • shutdown (сигнал TERM)

    • interrupt (shutdown без паузы; сигнал INT)

    • kill (даже не закрыв журналы; сигнал KILL)

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

    • check (сигнал ZERO)

    • parse

  • -s (level 0 debugging to syslog в дополнение к файлу)

  • -u порт (UDP порт для входных ICP запросов, 3130)

  • -v (напечатать версию)

  • -z (создать дисковый кеш при первом запуске)

  • -C (не отлавливать фатальные сигналы)

  • -D (не делать DNS-тест при запуске)

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

  • -N (не становиться фоновым процессом)

  • -V (поддержка виртуальных хостов для режима акселерации - аналогично "httpd_accel_host virtual" в конфигурационном файле)

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

  • -Y (более быстрое восстановление после сбоев)

Формат squid.conf

  • сетевые параметры

    • http_port 3128 (порт для запросов клиентов); в версии 2.3 можно указывать перед портом имя хоста или IP-адрес

    • https_port порт (обработка SSL/TLS запросов в режиме акселерации; в качестве опций указывается файл с сертификатом, приватный ключ, версия SSL/TLS, тип шифрования)

    • ssl_unclean_shutdown off

    • icp_port 3130 (если соседей не ожидается, то поставить "icp_port 0")

    • htcp_port 4827 (порт для общения с соседями - ICP - через TCP, нужен "--enable-htcp" в configure, иначе его нельзя устанавливать даже в 0)

    • mcast_groups 239.128.16.128 224.0.1.20 (к каким multicast группам подсоединяться для получения ICP, если используется multicast; для раздачи используется cache_peer; не трогать)

    • tcp_incoming_address 0.0.0.0 (по какому адресу принимать входные пакеты, если хост имеет несколько интерфейсов; в 2.3 убран)

    • tcp_outgoing_address 0.0.0.0 [[!]acl] (при посылке ставить указанный адрес в качестве исходного; в 2.5 появилась возможность задавать ACL)

    • udp_incoming_address 0.0.0.0 (по какому адресу принимать пакеты ICP)

    • udp_outgoing_address 255.255.255.255 (с какого адреса должны выходить пакеты ICP; по умолчанию - с того же, что и приходят)

    • passive_ftp on | off (по умолчанию включен, но если squid за firewall, то надо выключить (будет использоваться PORT); введен в 2.3-STABLE3)

    • tcp_outgoing_tos TOS-биты [!]acl (установка битов приоритета траффика в зависимости от ACL)

  • соседи (neighbour, peer)

    • cache_peer hostname type proxy-port icp-port options (каждый сосед описывается отдельной строкой)

      • type

        • parent - старший в иерархии (если запрос отсутствует в локальном кеше, то он направляется к parent, тот - при отсутствии в своем кеше - пересылает запрос дальше и возвращает готовый ответ подчиненному в иерархии; если squid получает от parent TCP_DENIED, то он лезет напрямую)

        • sibling - одного уровня (если запрос отсутствует в локальном кеше, то он направляется к sibling, тот - при отсутствии в своем кеше - сразу возвращает сообщение об этом, ничего не предпринимая)

        • multicast

      • options

        • proxy-only (объекты, взятые с этого узла не хранить у себя)

        • weight=число (число от 1, по умолчанию - 1, чем больше, тем больше приоритет при прочих равных)

        • ttl=число (TTL в посылаемых ICP пакетах при использовании multicast)

        • no-query (не посылать ICP запросы - только принимать)

        • default (самый старший в иерархии, используемый как last-resort)

        • round-robin (определяет множество старших кешей, используемых по очереди)

        • multicast-responder (данный сосед является членом multicast группы, запрос к нему посылается через multicast, но запросы от него будут обрабатываться и так)

        • closest-only (при ответах ICP_OP_MISS не передавать FIRST_PARENT_MISS)

        • no-digest (не запрашивать от этого соседа cash-digest)

        • no-netdb-exchange (не запрашивать у этого соседа ICMP RTT - round trip time - NetDB)

        • no-delay (при перегрузке delay pool не лезть к этому соседу)

        • login=user:password (если старший в иерархии proxy требует аутентификации)

        • login=PASS (передавать имя/пароль пользователя вышестоящему прокси)

        • connect-timeout=

        • digest-url=URL

        • allow-miss (передавать соседям запросы не только в режиме only-if-cached; может порождать циклы)

        • max-conn=число (максимальное число соединений с данным соседом)

    • cache_peer_domain host domain [domain...]
      ограничить запросы к данному соседу данным списком доменов (можно использовать отрицание с помощью восклицательного знака)

    • neighbor_type_domain parent | sibling domain...
      модифицировать тип соседа при запросах к данному домену

    • icp_query_timeout milisec (по умолчанию определяется автоматически для каждого соседа)

    • maximum_icp_query_timeout milisec

    • mcast_icp_query_timeout milisec (по умолчанию 2000 ms, ожидание ответа на регулярные multicast опросы)

    • dead_peer_timeout 10 seconds (как долго ждать прежде, чем объявить соседа "мертвым")

    • hierarchy_stoplist (список строк - через пробел, - при встрече которых в URL, запрос будет направлен сразу напрямую, а не "по соседям"; по-умолчанию - "cgi-bin ?")

    • no_cache deny имя-ACL (определяет список объектов, которые не будут кешироваться; по-умолчанию, кешируется все, хотя рекомендуется определить "acl QUERY urlpath_regex cgi-bin \?" запретить его кеширование "no_cache deny QUERY"; на самом деле cgi-bin и query все-таки кешируются, хотя и слабо)

  • размер кеша

    • cache_mem 8 MB (объем оперативной памяти, используемой для хранения обрабатываемых объектов; если требуется, то этот лимит может быть слегка превышен; если осталось свободное место, то оно используется для хранения наиболее часто используемых объектов отрицательных ответов; память используется и под другие нужды - индекс объектов - на каждый объект требуется около 100 байт ОП; если средний размер объекта 9КБ (в очень старом руководстве говорится - 20КБ, в более новом - 13КБ, у меня - 9КБ, как измельчал интернет!),  то на 8ГБ диска понадобится 100МБ ОП только под индекс объектов; еще понадобится память под кеш IP-адресов, fqdn-кеш и др.)

    • cache_swap_high 95 (при достижении данного уровня заполнения кеша - в процентах - начинается ускоренный процесс удаления старых объектов; для большого кеша эти границы надо поднять, 5% от 8 GB - это 400 MB!)

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

    • maximum_object_size 4096 KB (максимальный размер кешируемого объекта; если его увеличишь, то съэкономишь трафик, если уменьшишь, то странички быстрее грузиться будут - хотя можно просто увеличить размер кеша; максимальный размер объекта, который удалось за раз скачать по модему - 8 MB)

    • minimum_object_size 0 KB (файлы меньшего размера не сохраняются; введено в 2.3-STABLE3

    • maximum_object_size_in_memory 8 KB

    • ipcache_size 1024 (размер кеша для IP адресов)

    • ipcache_high 95 и ipcache_low 90 (верхний и нижний уровень заполнения IP кеша для алгоритма удаления старых объектов по LRU)

    • fqdncache_size 1024 (размер кеша fqdn - полных доменных имен)

    • cache_replacement_policy policy (алгоритмы замещения объектов в кеше: lru, heap GDSF, heap LFUDA или heap LRU; действует на последующие cache_dir)

    • memory_replacement_policy policy

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

    • cache_dir тип имя-директории Mbytes Level-1 Level2[read-only] [max-size=число] (определяет имя, размер и количество поддиректорий на первом и втором уровне кеша на диске - каждый кешируемый объект кладется в отдельный файл, файлы не сваливаются в одно место, а разносятся в двухуровневой иерархии директорий; можно иметь несколько директорий под кеш - особенно полезно иметь их на разных дисках; эксперимент показал, что при кэше в 700 МБ используется только 2 директории первого уровня; при стандартной структуре директорий кеша в него "с комфортом" влезает миллион объектов (9 GB), если их больше, то надо увеличить число директорий верхнего уровня; тип кеша указывается начиная с версии 2.3: ufs (unix file system), aufs (async ufs), diskd (внешние процессы для избежания блокировки squid на дисковом вводе/выводе); директорию верхнего уровня надо создавать самому; поддиректории создаются командой squid -z)

    • 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 (журнал записи объектов в дисковый кеш; автор рекомендуют поставить none, т.к. программ анализа все равно нет, нужен ли?)

    • cache_swap_log полное-имя-файла (это не журнал, а оглавление кеша на диске, нет смысла менять)

    • emulate_httpd_log off | on (эмулировать или нет Common Log Format; лучше использовать родной формат)

    • log_ip_on_direct on | off (записывать в журнале IP-адрес сервера или соседа вместо имени)

    • mime_table /usr/local/squid/etc/mime.conf (явно не хватает .class, .pl, .map, .ico, .bmp, .js, .css, .mid)

    • log_mime_hdrs off (в журнал access записываются переданные полученные HTTP-заголовки - очень интересная информация, но больно длинная)

    • useragent_log имя-файла (по-умолчанию none; в этот файл будут записываться строки User-agent из HTTP-заголовков; необходима компиляция с "--enable-useragent_log")

    • referer_log имя-файла (по-умолчанию none; в этот файл будут записываться строки Refererиз HTTP-заголовков; необходима компиляция с "--enable-referer_log")

    • pid_filename /usr/local/squid/logs/squid.pid (none, если не нужен)

    • debug_options раздел,уровень (уровень отладки; волшебное слово ALL для всех разделов; по умолчанию ALL,1; уровень от 1 до 9 - наивысший; перечень разделов приведен в doc/debug-sections.txt)

    • ident_lookup_access список-ACL (если запрос допускается ACL, то источник проверяется с помощью ident; по умолчанию "ident_lookup_access deny all" - по умолчанию ACL с именем all определяется так, что ему удовлетворяет любой запрос; чтоб запретить использовать ident совсем, можно компилировать с "--disable-ident")

    • log_fqdn off (определять и записывать в журнал полные доменные имена источника запроса, вносит дополнительную задержку в обработку запроса)

    • client_netmask 255.255.255.255 (при записи в журнал можно обнулять некоторые биты IP-адреса, чтоб защитить частную жизнь клиента)

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

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

    • ftp_list_width 32 (ширина листинга ftp) - маловато

    • cache_dns_program /usr/local/squid/bin/dnsserver

    • dns_children 5 (число процессов, которые делают DNS lookup вместо squid - чтобы он не зависал, ожидая результата поиска; 0 - если не нужен (неработоспособная конфигурация); от 5 до 32, сколько их надо легко понять, просматривая cache.log; при 300 тыс. запросах в день уже третий dnsserver имеет нулевую загрузку)

    • dns_retransmit_interval 5 seconds (каждый следующий интервал удваивается)

    • dns_timeout 5 minutes

    • dns_defnames off (дополнять однокомпонентные DNS-имена доменом по умолчанию перед запросом DNS-сервера)

    • dns_nameservers список-IP-адресов (будет использоваться вместо того списка DNS-серверов, который опреден в /etc/resolv.conf; по умолчанию - none)

    • hosts_file /etc/hosts

    • diskd_program /usr/local/squid/libexec/

    • unlinkd_program /usr/local/squid/bin/unlinkd (программа, используемая в параллельном процессе для удаления файлов; не нужна, если используется async-io)

    • pinger_program /usr/local/squid/bin/pinger (имя программы, используемой в параллельном процессе pinger; только если при компиляции использовался ключ "--enable-icmp")

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

    • redirect_children 5 (сколько процессов преобразования запускать параллельно)

    • redirect_rewrites_host_header on (по умолчанию, Squid переписывает поле "Host:" в заголовках преобразованных запросов, это не всегда хорошо)

    • redirector_access acl (какие запросы направлять через редиректор; по умолчанию - все; в версии 2.4 появились ключевые слова allow и deny перед acl)

    • auth_param схема имя-параметра значение (задание параметров для программ аутентификации в 2.5; параметры схемы basic: programm, children, realm, credentialsttl)

    • authenticate_program none (позволяет производить аутентификацию клиентов, делающих запросы; программа должна в цикле читать строку "имя пароль" выдавать OK или ERR; должен быть определен ACL proxy_auth; традиционная программа аутентификация определена в ../auth_modules/NCSA (надо сказать make; make install), после чего добавить
      authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd

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

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

    • authenticate_ip_ttl 0 (чтобы с нескольких мест не пользовались одним именем)

  • тонкая настройка кеша

    • wais_relay_host localhost

    • wais_relay_port 8000 (куда перенаправлять wais-запросы; в новых версиях по умолчанию - 0, что правильно :)

    • request_size 100 KB (максимально возможный размер запроса; если клиент загружает файлы с помощью метода POST, то необходимо увеличить допустимый размер) - убран в версии 2.3

    • request_header_max_size 10KB (появился в 2.3)

    • request_body_max_size 1 MB (появился в 2.3; в новых версиях по умолчанию - без ограничений)

    • reply_body_max_size 0 allow | deny all (появился в 2.3; в версии 2.4 появилась возможность задать ACL)

    • refresh_pattern [-i] regex MIN_AGE percent MAX_AGE[options]
      используется, чтоб определить не устарел ли объект в кеше. Имя объекта сравнивается по очереди с регулярными выражениями в строках refresh_pattern до первого совпадения, параметры из соответствующей строк используются в алгоритме проверки "на свежесть". По умолчанию, регулярные выражения различают прописные/строчные буквы, чтобы игнорировать это различие, используется ключ "-i". MIN_AGE и MAX_AGE- время в минутах (MAX_AGE также используется, если приходится делать запрос к соседям (Cache-Control: Max-age=nnn) ). procent - целое число. OBJ_DATE - время извлечения объекта с исходного сервера (заголовок HTTP Date). OBJ_LASTMOD - время последнего изменения объекта (заголовок HTTP Last-Modified). OBJ_AGE = NOW - OBJ_DATE (как давно мы его извлекли). LM_AGE = OBJ_DATE - OBJ_LASTMOD (насколько стар был объект в момент извлечения). LM_FACTOR = OBJ_AGE / LM_AGE. CLIENT_MAX_AGE - максимальный возраст объекта, который удовлетворит клиента (HTTP/1.1 Cache-Control: ). EXPIRES - срок хранения объекта (из ответа сервера, если есть). В общих чертах алгоритм описан так:

      если (определен CLIENT_MAX_AGE)
          если (OBJ_AGE > CLIENT_MAX_AGE)
              то (объект старый)
      если (определен EXPIRES) {
          если ( EXPIRES <= NOW)
          то (объект старый)
          иначе (объект свежий)
      }
      если (AGE > MAX_AGE) то (объект старый)
      если (OBJ_DATE > OBJ_LASTMOD ) {
          если (LM_FACTOR меньше PERCENT) то (объект свежий)
          иначе (объект старый)
      }
      если (AGE <= MIN_AGE) то (объект свежий)
      (объект старый)
      
      

      По умолчанию (я эти числа изрядно увеличиваю):

      1. refresh_pattern ^ftp: 1440 20% 10080

      2. refresh_pattern ^gopher: 1440 0% 1440

      3. refresh_pattern . 0 20% 4320

      options

      • override-expire - нарушение стандарта HTTP! - использовать min даже если явно задан expire

      • override-lastmod - использовать min даже для недавно модифицированных объектов

      • reload-into-ims - нарушение стандарта HTTP! - преобразует клиентские запросы типа no-cache в If-Modified-Since

      • ignore-reload - нарушение стандарта HTTP! - игнорировать заголовки no-cache или reload в запросах клиентов

    • replacement_policy GDSF | LFUDA (частотные алгоритмы замещения объектов в кеше вместо LRU; требуется --enable-heap-replacement при сборке; в версии 2.4 расслоился на cache_replacement_policy и memory_replacement_policy - см. выше)

    • reference_age 1 year (максимальное время хранения неиспользуемого объекта до его удаления по LRU алгоритму; если места на диске не хватает, то автоматически уменьшается)

    • quick_abort_min 16 KB (если клиент оборвал запрос, а осталось докачать всего min KB, то squid докачает)

    • quick_abort_max 16 KB (если клиент оборвал запрос, и осталось качать больше max KB, то прекратить)

    • quick_abort_pct 95 (если клиент оборвал запрос, а уже получено больше чем pct процентов объекта, то докачать)

    • negative_ttl 5 minutes (некоторые негативные ответы тоже кешируются - "connection refused "и "404 not found" - ttl задает их время жизни в кеше; по-моему, хватит и 1 минуты)

    • positive_dns_ttl 6 hours

    • negative_dns_ttl 5 minutes

    • range_offset_limit 0 KB (если клиент делает запрос с середины объекта, то offset_limit равный -1 вынуждает squid загрузить весь объект в кеш до того как начать передачу клиенту - скажем 17го мегабайта ;) -; offset_limit равный 0 означает. что squid никогда не будет грузить больше, чем клиент запросил; offset_limit равен определенному числу означает, что squid будет грузить весь объект, если начало запроса меньше этого числа)

  • timeout's

    • connect_timeout 120 seconds (сколько времени ждать соединения от squid к серверу)

    • peer_connect_timeout 30 seconds

    • siteselect_timeout 4 seconds (сколько времен разрешается потратить на выбор URL из URN)

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

    • request_timeout 30 seconds (сколько разрешается ждать запроса после установления соединения, маловато)

    • persistent_request_timeout 1 minute (в 2.4)

    • client_lifetime 1 day (сколько времени разрешать клиенту быть присоединенным к squid; в т.ч. в случае если он ушел не попрощавшись; это перебор, хватит и 8 часов; соединение обрывается даже если происходит передача данных!)

    • half_closed_clients on (разрешать наполовину закрытые соединения - например чтение есть, а запись уже закрыта; не стоит их баловать)

    • pconn_timeout 120 seconds (постоянные соединения с серверами и другими кешами)

    • ident_timeout 10 seconds

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

  • ACL - определение списка доступа (тип: тип объекта, строка: регулярное выражение - шаблон для сравнения; по умолчанию чувствительное к регистру букв (строчные/прописные); чтобы игнорировать регистр букв, надо использовать ключ "-i")
    acl имя тип строка ... ... (логическое ИЛИ)
    acl имя тип "имя файла" (по одному параметру в строке)
    типы:

    • src ip-address/netmask ... (clients IP address)

    • src addr1-addr2 ... (range of addresses)

    • dst ip-address/netmask ... (URL host's IP address)

    • myip ip-address/netmask ... (local socket IP address)

    • srcdomain foo.com ... (reverse lookup, client IP)

    • dstdomain foo.com ... (Destination server from URL; если в URL использовался IP, то делается попытка определить имя домена, если не удалась, то подставляется слово "none")

    • srcdom_regex [-i] строка ... (regex matching client name)

    • dstdom_regex [-i] строка ... (regex matching server; если в URL использовался IP, то делается попытка определить имя домена, если не удалась, то подставляется слово "none")

    • time [day-abbrevs] [h1:m1-h2:m2] (где день это одна буква из SMTWHFA)

    • url_regex [-i] строка (регулярное выражение для всего URL)

    • urlpath_regex [-i] строка (регулярное выражение для path-части URL)

    • port порт ... (перечень портов)
      в стандартной конфигурации определяется ACL Safe_port для интервала 1024-65535; это слишком слабое ограничение; лучше к безопасным портам отнести 32768-65535 (у меня все клиентские порты начинаются с 32768 и firewall эа этим следит), и отдельно всякие извращения перевода с русского на русский - 81, 82, 83, 88, 8000-8002, 8080-8083, 8091, 8100-8103, 8888

    • port порт1-порт2(интервал портов)

    • myport порт ... (перечень портов)

    • proto [HTTP | FTP | ...]

    • method [GET | POST | ... ] (в т.ч. собственный метод purge: acl PURGE method purge)

    • browser [-i] regexp (сопоставляется заголовок User-Agent)

    • referer_regex [-i] regexp (сопоставляется заголовок Referer)

    • ident username ... (строка REQUIRED сопоставляется любому непустому слову)

    • ident_regex [-i] regexp

    • src_as number ...  (номера автономных систем - AS, делается запрос к whois.ra.net на поиск !gASномер)

    • dst_as number ... (не более 253 или поставить IP-адрес в as_whois; такой поток запросов RADB не выдерживает, так что надо сделать несколько раз squid restart, чтобы таблица адресов заполнилась)

    • proxy_auth username ... (можно использовать строку REQUIREDдля любого имени пользователя)

    • proxy_auth_regex [-i] regexp

    • snmp community string ...

    • maxconn число(больше чем указанное число соединений с одного и того же IP)

    • max_user_ip число(больше чем указанное число соединений одного пользователя с различных IP-адресов)

    • req_mime_type regexp (тип upload)

    • rep_mime_type regexp (нельзя использовать в http_access)

  • права доступа

    • http_access allow|deny [!]aclname ... (кому разрешать доступ к прокси по HTTP; здесь и далее - логическое И)

    • http_reply_access allow|deny [!]aclname ... (какие ответы на запросы разрешить; http_reply_access allow all)icp_access allow|deny [!]aclname ... (кому разрешать доступ к прокси по ICP)

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

    • cache_peer_access cache-host allow|deny [!]aclname ... (ограничить запросы к данному соседу - расширение для cache_peer_domain)

    • proxy_auth_realm Squid proxy-caching web server (строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кешу; в 2.4 заменен обобщенной директивой auth_param)

  • ident_lookup_access allow|deny [!]aclname

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

    • cache_mgr email (почтовый адрес, на который будет послано письмо, если squid грохнется)

    • cache_effective_user nobody (если запустить squid от имени root, то поменять UID на указанный)

    • cache_effective_group nogroup

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

    • unique_hostname уникальное-имя (если нескольким кешам дали одно и то же visible_hostname, то чтобы предотвратить циклы, надо определить каждому из них уникальное имя)

    • hostname_aliases имя ... (список синонимов для нашего имени хоста)

  • параметр саморекламы, посылаемой в http://ircache.nlanr.net/Cache/Tracker

    • announce_period 0 day (0 означает - не посылать никогда)

    • announce_host tracker.ircache.net

    • announce_port 3131

    • announce_file имя-файла (дополнительно к стандартно информации - хост, порт - посылается этот файл)

  • параметры для работы в режиме ускорителя http-сервера

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

    • httpd_accel_port port

    • httpd_accel_single_host off

    • httpd_accel_with_proxy on|off (по умолчанию кеширование для ускоряемого сервера выключено)

    • httpd_accel_uses_host_header on|off (для работы в прозрачном режиме требуется включить, иначе виртуальные сервера не будут правильно кешироваться, но т.к. squid не проверяет соответствие заголовка Head: и имени в URL, то это опасно. Я так понимаю, что можно подсовывать в кеш страницы с одного сервера под именем другого, затем когда нормальный пользователь запросит страницу с этого другого сервера, то он получит ее из кеша, куда она попала с первого сервера. Исправлено в 2.3)

  • разное

    • dns_testnames netscape.com internic.net nlanr.net microsoft.com (список имен хостов на примере которых проверяется работоспособность DNS, чтобы запретить проверку надо использовать ключ -D)

    • logfile_rotate 10 (squid -k rotate переименовывает журнальные файлы, данный параметр задает количество старых копий для ротации)

    • append_domain .deol.ru (добавляется к имени хоста, если в нем нет ни одной точки)

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

    • err_html_text строка (подставляется в шаблоны текстов сообщений об ошибках - лежат в директории error - вместо %L)

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

    • memory_pools on|off (по умолчанию, однажды захваченная, но ныне не используемая память не отдается обратно в систему, off позволяет освобождать ее)

    • memory_pools_limit байт (максимальное количество неиспользуемой памяти, которое squid будет придерживать; если 0, то придерживать все, что было захвачено; см. memory_pools)

    • forwarded_for on|off (если включено - по умолчанию - то squid будет вставлять IP-адрес или имя в заголовок перенаправляемых HTTP-запросов: "X-Forwarded-For: 192.1.2.3"; если выключено, то "X-Forwarded-For: unknown")

    • log_icp_queries on|off (записывать ли в журнал ICP-запросы)

    • icp_hit_stale on|off (возвращать ли ответ ICP_HIT для зачерствевших объектов; по умолчанию - off)

    • minimum_direct_hops 4 (If using the ICMP pinging stuff, do direct fetches for sites which are no more than this many hops away)

    • minimum_direct_rtt400 (при использовании ICMP ping для вычисления близости серверов, использовать только тех соседей, которые отзываются быстрее указанного числа милисекунд)

    • cachemgr_passwd password action action ... (задание пароля для действий по администрированию squid; чтоб запретить действие - поставьте пароль disable; чтоб разрешить действие без проверки пароля - поставьте пароль none, кроме действий config и shutdown; неполный список действий: 5min, 60min, asndb, authenticator, cbdata, client_list, comm_incoming, config, counters, delay, digest_stats, dns, events, filedescriptors, fqdncache, histograms, http_headers, info, io, ipcache, mem, menu, netdb, non_peers, objects, pconn, peer_select, redirector, refresh, server_list, shutdown, store_digest, storedir, utilization, via_headers, vm_objects; имя действия all - для всех действий)

    • store_avg_object_size 13 KB (предполагаемый средний размер объекта, используемый для расчетов; у меня - 9КБ (12 КБ, если не кешировать маленькие объекты); не д.б. вдвое больше реального или возникнут проблемы)

    • store_objects_per_bucket 20 (число объектов на хеш-корзину, чем меньше, тем больше будет создано корзин)

    • client_db on|off (сбор статистики о клиентах, по умолчанию - включен)

    • netdb_low 900

    • netdb_high 1000 (нижняя верхняя границы для базы данных измерения ICMP)

    • netdb_ping_period 5 minutes (минимальное время между ping-ами в одну и ту же сеть)

    • query_icmp on|off (должны ли соседи включать в ICP ответы включать ICMP данные; соответствующие данные собираются если сосед сконфигурирован с --enable-icmp, в это случае он измеряет путь до http-сервера помощью ICMP, выключен по умолчанию)

    • test_reachability on|off (если включить, то ответ ICP_MISS будет заменяться на ICP_MISS_NOFETCH если сервер отсутствует в ICMP базе данных или RTT равен нулю)

    • buffered_logs on|off (при включении запись в журнал буферизуется и слегка ускоряется)

    • reload_into_ims on|off (при включении запросы типа no-cache или reload будут преобразовываться в If-Modified-Since; является нарушением стандартов; более гибкая настройка через refresh_pattern)

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

    • never_direct allow|deny [!]aclname ...

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

    • header_access имя-заголовка allow | dyne [!]acl (введен в 2.4 вместо aninymize_headers; вместо имени заголовка можно использовать ключевые слова All и Other)

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

    • header_replace имя-заголовка строка (заменить заголовок на указанную строку; введен в 2.4 вместо fake_user_agent)

    • icon_directory /usr/local/squid/etc/icons

    • error_directory /usr/local/squid/share/errors/English

    • minimum_retry_timeout 5 seconds (если сервер имеет несколько IP адресов, то connection timeout делится на их количество, данный параметр ограничивает получившийся результат снизу, маловато)

    • maximum_single_addr_tries 3 (сколько раз пытаться достучаться до сервера, имеющего 1 IP адрес; если сервер имеет несколько IP адресов, то каждый из них будет опробован ровно один раз)

    • snmp_port 3401 (порт, который слушает squid для SNMP запросов)

    • forward_snmpd_port 0 (если задан порт, то на него перенаправляются все SNMP-запросы; убрано в 2.3)

    • snmp_access allow|deny [!]aclname ... (кто будет допущен к SNMP порту, по умолчанию - никто)

    • snmp_incoming_address 0.0.0.0

    • snmp_outgoing_address 0.0.0.0

    • as_whois_server имя (whois сервер, используемый для получения номера AS; только при запуске или reconfigure; whois.ra.net aka whois.radb.net; лучше поставить IP адрес, иначе нельзя будет использовать более 250 AS)

    • wccp_router ip-адрес

    • wccp_version 4 (для IOS 11.2 нужна версия 3)

    • wccp_incoming_address IP-адрес

    • wccp_outgoing_address IP-адрес

    • incoming_icp_average 6

    • incoming_http_average 4

    • incoming_dns_average 4

    • min_icp_poll_cnt 8

    • min_http_poll_cnt 8

    • min_dns_poll_cnt 8

    • max_open_disk_fds

    • offline_mode on|off (если включить, то squid будет брать объекты только из кеша и не будет пытaться обращаться к первоисточникам)

    • uri_whitespace strip (что делать с запросами, имеющими пробелы в URI)

      • strip - удалять пробелы

      • deny - сообщать Invalid Request

      • allow - передавать как есть

      • encode - кодировать в соответствии с RFC1738 и передавать дальше

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

    • broken_posts allow|deny acl ... (если запрос удовлетворяет acl и имеет тип PUT/POST, то squid посылает дополнительный CRLF после тела запроса, чтоб успокоить неправильно написанный сервер)

    • mcast_miss_addr адрес (по этому multicast адресу посылается сообщение при каждом cache miss)

    • mcast_miss_port порт

    • mcast_miss_encode_key ключ

    • nonhierarchical_direct on (запросы из hierarchy_stoplist и некешируемых типов будут направляться к первоисточнику, off - к родительскому кешу)

    • prefer_direct on (если накакая методика - ICP, TCCP, digest - не указали родительский кеш, то напрвлять запрос к первоисточнику; off - к родительскому кешу)

    • strip_query_terms on (удалять параметры query перед записью в журнал)

    • coredump_dir (по умолчанию в cache_dir)

    • redirector_bypass on | off (если включен и все редиректоры заняты, то не обрабатывать URI редиректором; если выключен и нет свободных редиректоров, то аварийное завершение - применяется, если редиректор используется для аутентификации)

    • ignore_unknown_nameservers on (игнорировать сообщения от DNS-серверов, которые мы не запрашивали)

    • chroot (делать chroot после разбора конфигурации; reconfigure работать не будет, если прислушиваемся к портам < 1024)

    • client_persistent_connections on (использовать постоянные соединения при общении с клиентами)

    • server_persistent_connections on (использовать постоянные соединения при общении с серверами)

    • pipeline_prefetch on (если клиент работает в режиме pipeline, то запрашивать с сервера 2 объекта параллельно)

    • extension_methods (позволяет задать дополнительные нестандартизованные методы доступа HTTP - можно подсмотреть в cache.log)

    • high_response_time_warning msec (выдается предупреждение, если среднее время ответа в течении минуты превышает указанную величину)

    • high_page_fault_warning штук-в-секунду (выдается предупреждение, если среднее за минуту число подкачек страниц в секунду превышает указанную величину)

    • high_memory_warning число (выдается предупреждение, если используется слишком много памяти - mallinfo)

    • store_dir_select_algorithm least-load | round-robin (алгоритм выбора директории хранения для кешируемого объекта)

    • ie_refresh off (борьба с неспособностью MS IE до 5.5 SP1 сделать полноценный refresh, снижает эффективность кеширования)

    • vary_ignore_expire off (позволяет squid игнорировать в некоторых случаях нулевое время хранения объекта - Expire: на текущее время)

  • параметры DELAY POOL, ограничивают интенсивность использования кеша для отдельных хостов и подсетей

    • delay_pools 0

    • delay_class номер-пула класс (д.б. ровно один пул каждого класса; классы: 1 - 3)

    • delay_access номер-пула allow|deny acl ...

    • delay_parameters pool aggregate network individual

    • delay_initial_bucket_level 50

  • работа с БД digest

    • digest_generation on

    • digest_bits_per_entry

    • digest_rebuild_period

    • digest_rewrite_period

    • digest_swapout_chunk_size

    • digest_rebuild_chunk_procentage

Далее >>>

 

© Krio, Xbyte, BooM
2004-2012

id-sign