|
|
 |
Представляет собой HTTP, FTP, gopher, SSL и WAIS (убрано в 2.6) 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 3.0-STABLE24 (переписано на C++, официально добавлен ICAP), Squid 2.7-STABLE8, Squid 2.6-STABLE23; готовится к выходу 3.1 (отличия 2.7.STABLE8 от 2.6.STABLE23, 2.6.STABLE23 от 2.6.STABLE16, 2.6.STABLE16 от 2.6.STABLE12, 2.6.STABLE12 от 2.5.STABLE14, 2.5.STABLE14 от 2.5.STABLE6, 2.5.STABLE6 от 2.4, 2.4 от 2.3, 2.3 от 2.2).
Squid 2.6.STABLE21, Linux CentOS 5.4, x86_64, из пакетов
Squid 2.6.STABLE16, Linux CentOS 5.0 (головной для филиалов)
Squid 2.6.STABLE12, Linux CentOS 4.4 (головной для филиала)
Squid 2.5.STABLE6, Linux CentOS 4.0/4.4 (без излишеств)
Squid 2.5-PRE6, Linux RedHat 7.2 (transparent, балансировка нагрузки, антибаннер)
Squid 2.3-STABLE4, Linux RedHat 7.0 (два сервера: распасовщик и антибаннер)
Squid 2.3-STABLE2, Linux RedHat 6.2 (transparent proxy)
Squid 2.3-STABLE1, Linux RedHat 6.0 (распасовочный)
Squid 2.2-STABLE4, Linux RedHat 6.0, из rpm
Squid 2.2-STABLE2, Solaris 2.5, Sparc
|
Полезные ключи ./configure (--help, squid -v)
|
- --prefix=/usr/local/squid (куда инсталлировать файлы, также имеется множество дополнительных ключей для тонкой настройки расположения файлов)
- --enable-async-io=число-нитей (подразумевает --with-aufs-threads=число-нитей, --with-pthreads, --enable-storeio=ufs,aufs)
- --enable-storeio="список-методов-хранения" (ufs — unix file system; aufs — async unix file system; diskd — отдельные процессы для асинхронного доступа к файлам; null — не хранить данные на диске; coss — файловая система COSS)
- --enable-icmp (измерять путь до каждого HTTP-сервера при запросах с помощью ICMP, используется для оптимизации выбора сервера или соседа)
- --enable-htcp (HTCP — вариант ICP по TCP, синхронизация кеша с соседями)
- --enable-forw-via-db (включить поддержку БД Forw/Via для оптимизации выбора сервера или соседа)
- --enable-cache-digests (использовать Cache Digests для оптимизации выбора сервера или соседа)
- --enable-carp (включить балансировку с помощью CARP — Cache Array Routing Protocol; в новых версиях его надо наоборот отключать: --disable-carp)
- --disable-wccp (не включать поддержку протокола WCCP — Web Cache Coordination Protocol — позволяет Cisco IOS автоматически распознавать падение сервера)
- --disable-wccpv2
- --enable-delay-pools (управление ограничением трафика)
- --enable-useragent-log (журнализовать заголовок Useragent)
- --enable-referer-log (журнализовать заголовок Referer)
- --enable-forward-log (поддержка директивы forward_log, в 2.6)
- --enable-kill-parent-hack (помогает сделать shutdown чисто)
- --enable-snmp (включить SNMP сервер для мониторинга)
- --enable-arp-acl (поддержка ACL, основанных на ethernet MAC адресах)
- --enable-cachemgr-hostname=имя-хоста (cachemgr.cgi будет по умолчанию натравлен на этот хост)
- --enable-err-language=языки-для-сообщений-об-ошибках (по умолчанию — все)
- --enable-default-err-language=язык-сообщений-об-ошибках (Russian-1251?)
- --enable-gnuregex (вместо regex, плохо работающего в старых Linux)
- --enable-poll (можно использовать poll, epoll или select; poll быстрее, но не на всех платформах работает; обычно выбор делается автоматически, но если вы умнее configure, то можете это проверить)
- --disable-poll
- --enable-select
- --disable-select
- --enable-select-simple (использовать только простое подмножество select)
- --enable-epoll
- --disable-epoll
- --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)
- --enable-large-cache-files (позволяет хранить в кеше файлы размером более 2GB; при этом меняется формат хранения; 2.6)
- --enable-linux-tproxy (поддержка Netfilter TPROXY)
- --disable-ident-lookups (ident в современном мире — вещь бесполезная)
- --disable-internal-dns (вместо внутренних запросов использовать внешние процессы dnsserver; рекомендуется для версий до 2.4)
- --enable-truncate (обнулять файлы вместо их удаления: быстрее, но требует много inode; были проблемы, когда переполнялась таблица inode; наверное, параметр minimum_object_size из-за этого появился; не рекомендуется для асинхронного ввода/вывода)
- --disable-unlinkd (запретить использование внешних процессов для удаления файлов)
- --enable-underscores (позволять подчеркивания в именах хостов, надеясь что резолвер их не обрежет; в 2.6 заменён директивой squid.conf)
- --enable-heap-replacement (использовать улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid до 2.4; в новых версиях рекомендуется использовать --enable-removal-policies)
- --enable-removal-policies="lru,heap" (улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid 2.4 и выше)
- --enable-dlmalloc (своя библиотека malloc, не быстрая но без memore leak)
- --enable-ssl (включить поддержку работы в качестве шлюза SSL с помощью OpenSSL)
- --enable-auth="список методов аутентификации" (по умолчанию только basic; вместе со squid поставляются: basic, digest, ntlm, negotiate; имеется множество дополнительных ключей, позволяющих настраивать отдельные методы аутентификации:
- --enable-basic-auth-helpers="список программ для аутентификации basic" (в комплекте имеются: getpwnam, LDAP, MSNT (обращается к NT серверу), mswin_sspi (только под MS Windows NT?), multi-domain-NTLM, NCSA, PAM, SASL, SMB, YP)
- --enable-ntlm-auth-helpers="список программ для аутентификации ntlm" (в комплекте имеются: fakeauth (проверяет только синтаксис запроса), mswin_sspi (только под MS Windows NT?), no_check (проверяет только синтаксис запроса), SMB (обращается к контроллеру домена)
- --enable-ntlm-fail-open (делать клиентам "поблажки")
- --enable-digest-auth-helpers="список программ для аутентификации digest" (в комплекте имеются: password, ldap)
- --enable-negotiate-auth-helpers="список программ для аутентификации negotiate" (в комплекте имеются: mswin_sspi (только под MS Windows NT?))
- --enable-external-acl-helpers="список программ для проверки ACL" (в комплекте имеются: ip_user, ldap_group, mswin_lm_group, session, unix_group, wbinfo_group)
- --enable-follow-x-forwarded-for (отслеживать цепочку X-Forwarded-For, 2.6)
- --with-large-files (журналы и пр.)
- --with-maxfd=число-дескрипторов
- --with-openssl= (в CentOS надо указать /usr/kerberos)
- -a порт (TCP порт для входных HTTP запросов, 3128)
- -d (отладка на stderr)
- -f имя-файла-конфигурации
- -h (help)
- -k (послать команду работающему серверу, номер процесса из squid.pid?)
- reconfigure (посылка сигнала HUP — разобрать заново файл конфигурации)
- rotate (rotate журналы; сигнал USR1)
- shutdown (сигнал TERM)
- interrupt (shutdown без паузы; сигнал INT)
- kill (даже не закрыв журналы; сигнал KILL)
- debug (начать/закончить полную трассировку; сигнал USR2)
- check (сигнал ZERO)
- parse (проверить синтаксис squid.conf)
- -l facility (источник для записей в syslog)
- -s (level 0 debugging to syslog в дополнение к выводу в файл)
- -u порт (UDP порт для входных ICP запросов, 3130)
- -v (напечатать версию параметры сборки)
- -z (создать дисковый кеш при первом запуске)
- -C (не отлавливать сигналы к завершению)
- -D (не делать DNS-тест при запуске)
- -F (восстановление после сбоя не в фоновом режиме)
- -N (не становиться фоновым процессом)
- -R (не устанавливать REUSEADDR на порту)
- -V (поддержка виртуальных хостов для режима акселерации — аналогично "httpd_accel_host virtual" в конфигурационном файле)
- -X (включить отладку при разборе конфигурационного файла)
- -Y (более быстрое восстановление после сбоев)
- сетевые параметры сервера
- 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; по умолчанию — с того же, что и приходят)
- tcp_outgoing_tos TOS-биты [!]acl (установка битов приоритета траффика в зависимости от ACL)
- tcp_recv_bufsize 0 bytes (0 означает, что надо использовать размер буфера по умолчанию)
- 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
- соседи (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 ?")
- 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 для вычисления близости серверов, использовать только тех соседей, которые отзываются быстрее указанного числа милисекунд)
- icp_hit_stale on|off (возвращать ли ответ ICP_HIT для зачерствевших объектов; по умолчанию — 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 равен нулю)
- retry_on_error off (повторять запрос к соседу после получения сообщения об ошибке)
- mcast_miss_addr адрес (по этому multicast адресу посылается сообщение при каждом cache miss)
- mcast_miss_port порт
- mcast_miss_encode_key ключ
- nonhierarchical_direct on (запросы из hierarchy_stoplist и некешируемых типов будут направляться к первоисточнику, off — к родительскому кешу)
- prefer_direct on (если никакая методика — ICP, HTCP, digest — не указали родительский кеш, то напрвлять запрос к первоисточнику; off — к родительскому кешу)
- размер кеша и параметры кеширования, параметры запросов
- сообщения об ошибках, журналы и мониторинг
- logformat имя спецификация-формата (позволяет описать формат журнала запросов; предопределены форматы squid, squidmime, common и combined)
- cache_access_log /usr/local/squid/logs/access.log (журнал запросов к кешу; до версии 2.6)
- access_log /usr/local/squid/logs/access.log [имя-формата [ACL …]] (журнал запросов к кешу; в версии 2.6)
- cache_log /usr/local/squid/logs/cache.log (журнал запусков процессов)
- cache_store_log /usr/local/squid/logs/store.log (журнал записи объектов в дисковый кеш; авторы рекомендуют поставить none, т.к. программ анализа все равно нет
- emulate_httpd_log off | on (эмулировать или нет Common Log Format; лучше использовать родной формат)
- log_ip_on_direct on | off (записывать в журнале IP-адрес сервера или соседа вместо имени)
- log_mime_hdrs off (в журнал access записываются переданные полученные HTTP-заголовки — очень интересная информация, но больно длинная)
- useragent_log имя-файла (по-умолчанию none; в этот файл будут записываться строки User-agent из HTTP-заголовков; необходима компиляция с "--enable-useragent_log")
- referer_log имя-файла (по-умолчанию none; в этот файл будут записываться строки Refererиз HTTP-заголовков; необходима компиляция с "--enable-referer_log")
- debug_options раздел,уровень (уровень отладки; волшебное слово ALL для всех разделов; по умолчанию ALL,1; уровень от 1 до 9 — наивысший; перечень разделов приведен в doc/debug-sections.txt)
- log_fqdn off (определять и записывать в журнал полные доменные имена источника запроса, вносит дополнительную задержку в обработку запроса)
- client_netmask 255.255.255.255 (при записи в журнал можно обнулять некоторые биты IP-адреса, чтоб защитить частную жизнь клиента)
- log_icp_queries on|off (записывать ли в журнал ICP-запросы)
- logfile_rotate 10 (squid -k rotate переименовывает журнальные файлы, данный параметр задает количество старых копий для ротации)
- err_html_text строка (подставляется в шаблоны текстов сообщений об ошибках — лежат в директории error — вместо %L)
- deny_info err_page_name acl (запросы, не прошедшие проверку в http_access, проверяются на соответствие acl выдается соответствующее сообщение об ошибке из файла
| |