Squid состоит из - основной программы squid, программы обработки DNS запросов dnsserver, программы скачивания ftp данных ftpget, а также некоторых инструментов управления. Когда squid запускается, он запускает заданное число dnsserver-ов, каждый из которых работает самостоятельно, блокируя только DNS запросы. Таким образом уменьшается общее время ожидания ответа DNS.
Squid берет свое начало с основанного ARPA проекта Harvest. http://harvest.cs.colorado.edu/
Нам нужно было как-то отличаться от кеша Harvest. Squid было кодовое название на начальной стадии разработки, а потом оно прилипло.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Ъ See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Пожалуйста шлите исправления, обновления и комментарии на: squid-faq@nlanr.net.
% gzip -dc squid-x.y.z-src.tar.gz | tar xvf -
Затем нужно отконфигурировать, откомпилировать и установить
% cd squid-x.y.z
% ./configure
% make all
% make install
Лучше всего использовать GNU C (gcc) компилятор. Последние версии имеют формат ANSI C, так что старые компиляторы могут не работать. GNU C компилятор доступен на ftp://prep.ai.mit.edu/pub/gnu/. Можно задать несколько параметров конфигурационного скрипта. Наиболее полезный --prefix для установки в другую директорию. По умолчанию это /usr/local/squid.Чтобы поменять следует сделать следующее:
% cd squid-x.y.z
% ./configure --prefix=/some/other/directory/squid
/usr/local/squid/bin/RunCache &
% client http://www.netscape.com/ > test
Существуют и другие HTTP программы-клиенты работающие в командной строке. Эти две Вы можете найти полезными:url_get, по адресу ftp://ftp.pasteur.fr/pub/Network/url_get/, иechoping, по адресу ftp://ftp.pasteur.fr/pub/Network/echoping/. Также проверьте наиболее важные файлы access.log иcache.log.
ЪЪЪ cd squid-1.1.x ЪЪЪ patch < /tmp/fixes.patch Но время от времени могут попадаться патчи созданные из директории 'src', тогда нужно:
ЪЪЪ cd squid-1.1.x/src ЪЪЪ patch < /tmp/fixes.patch Если программа patch будет чем-то недовольна и будет отказываться работать надо будет взять более новую версию, например здесь GNU FTP site.Ъ
Например, приведенный нижеsquid.conf на childcache.example.com сконфигурирован так, что его кеш получает данные с одного родительского и с двух братских кешей:
ЪЪЪЪЪЪЪ #Ъ squid.conf - On the host: childcache.example.com ЪЪЪЪЪЪЪ # ЪЪЪЪЪЪЪ #Ъ Format is: hostnameЪ typeЪ http_portЪ udp_port ЪЪЪЪЪЪЪ # ЪЪЪЪЪЪЪ cache_host parentcache.example.comЪЪ parentЪ 3128 3130 ЪЪЪЪЪЪЪ cache_host childcache2.example.comЪЪ sibling 3128 3130 ЪЪЪЪЪЪЪ cache_host childcache3.example.comЪЪ sibling 3128 3130Директива cache_host_domain позволяет указывать для каждого домена как братский, так и родительский кеш:
ЪЪЪЪЪЪЪ #Ъ squid.conf - On the host: sv.cache.nlanr.net ЪЪЪЪЪЪЪ # ЪЪЪЪЪЪЪ #Ъ Format is: hostnameЪ typeЪ http_portЪ udp_port ЪЪЪЪЪЪЪ # ЪЪЪЪЪЪЪ cache_host electraglide.geog.unsw.edu.au parent 3128 3130 ЪЪЪЪЪЪЪ cache_host cache1.nzgate.net.nzЪЪЪЪЪЪЪЪЪ parent 3128 3130 ЪЪЪЪЪЪЪ cache_host pb.cache.nlanr.netЪЪ parent 3128 3130 ЪЪЪЪЪЪЪ cache_host it.cache.nlanr.netЪЪ parent 3128 3130 ЪЪЪЪЪЪЪ cache_host sd.cache.nlanr.netЪЪ parent 3128 3130 ЪЪЪЪЪЪЪ cache_host uc.cache.nlanr.netЪЪ sibling 3128 3130 ЪЪЪЪЪЪЪ cache_host bo.cache.nlanr.netЪЪ sibling 3128 3130 ЪЪЪЪЪЪЪ cache_host_domain electraglide.geog.unsw.edu.au .au ЪЪЪЪЪЪЪ cache_host_domain cache1.nzgate.net.nzЪЪ .au .aq .fj .nz ЪЪЪЪЪЪЪ cache_host_domain pb.cache.nlanr.netЪЪЪЪ .uk .de .fr .no .se .it ЪЪЪЪЪЪЪ cache_host_domain it.cache.nlanr.netЪЪЪЪ .uk .de .fr .no .se .it ЪЪЪЪЪЪЪ cache_host_domain sd.cache.nlanr.netЪЪЪЪ .mx .za .mu .zmВышеприведенная конфигурация описывает, что кеш будет использовать pb.cache.nlanr.net и it.cache.nlanr.net для доменов uk, de, fr, no, se и it, sd.cache.nlanr.net для доменов mx, za, mu и zm, и cache1.nzgate.net.nz для доменов au, aq, fj, и nz.
cache_announce 24 announce_to sd.cache.nlanr.net:3131 Примечание: анонсирование кеша это не тоже самое что вступление в иерархию NLANR. Вы можете вступить в иерархию NLANR без регистрации, и можно зарегистрироваться без вступления в иерархию кешей NLANR.
Ускоритель кеширует приходящие запросы для исходящих данных (например, тех что Вы опубликовали на своем сервере). Тем самым он забирает загрузку с Вашего HTTP сервера и внутренней сети. Вы убираете сервер с 80 порта (или какой он у Вас там), и подставляете ускоритель, который пробрасывает HTTP данные с "реального" HTTP сервера (только ускоритель должен знать где реальный сервер). Внешний мир не видит ни какой разницы (кроме разве увеличения скорости доступа).
Кроме разгрузки реального web сервера, ускоритель может находиться снаружи брандмауэра или любого другого узкого места в сети и общаться с HTTP серверами внутри, уменьшая траффик через узкое место и упрощая конфигурацию. Два или более ускорителя соединенные через ICP могут увеличить скорость и устойчивость web сервера к любому одиночному сбою.
Редиректор Squid может заставить ускоритель работать как одну связную машину для нескольких серверов. Если Вам нужно перенести части Вашей файловой системы с одного сервера на другой, или если отдельно администрируемые HTTP сервера должны логически появляться под единой URL иерархией, ускоритель сделает это.
Если Вы хотите лишь кешировать "остальной мир" для увеличения эффективности доступа локальных пользователей в Интернет, то режим ускорителя следует отключить. Компании, которые держат свой web-сервер используют ускоритель для повышения эффективности доступа к нему. Те же, кому важен эффективный доступ локальных пользователей в Интернет используют кеширующий прокси. Многие, и мы в том числе пользуются и тем и этим.
Сравнение кеша Squid и его аналога Harvest показывает увеличение на порядок производительности первого по сравнению с CERN и другими широко распространнеными кеширующими программами. Это преимущество позволяет кешу работать как httpd ускорителю, кешу сконфигурированному как главный web-сервер (на 80 порту), перенаправляя неправильные ссылки на реальный httpd (на 81 порт).
В такой конфигурации администратор web узла переносит все не подлежащие кешированию URL на 81 порт httpd. Кеш обслуживает ссылки на кешируемые объекты, такие как HTML страницы и GIF-ы, а реальный httpd (на 81 порту) - все некешируемые, например запросы и cgi-bin программы. Если пользование сервером напрямую зависит от кешируемых объектов, то такая конфигурация может существенно снизить загрузку web-сервера.
При этом помните, что лучше всего не запускать squid как httpd-ускоритель и как кеширующий прокси одновременно, так как они имеют различные рабочие режимы. Более высокую производительность Вы получите запуская их на разных машинах. Все же Squid может одновременно работать и как httpd-ускоритель и как кеширующий прокси, если напротив httpd_accel_with_proxy Вы поставите on в своем squid.conf.
Нужно воспользоваться директивой inside_firewall в squid.conf чтобы задать список внутренних по отношению к брандмауэру доменов. Например:
inside_firewall example.com
Можно задать несколько:
inside_firewall example.com example.org example.net
Использование inside_firewall приводит к двум путям выбора сервера. Объекты не подпадающие ни под один из перечисленных доменов будут рассматриваться вне брандмауэра. Для этого же случая:
Поэтому очень важно чтобы было достаточно dnsserver процессов чтобы обработать каждое обращение, в противном случаеsquid может неожиданно повисать. На практике надо определить максимальное число dnsserver-ов, которые могут понадобиться squid, и добавить еще два на всякий случай. Другими словами, если Вы видели в работе только три dnsserver процесса, оставьте как минимум пять. И помните, чтоdnsserver маленький и при простое особо не загружает систему.
Чтобы пользоваться socks5, не требуется никак изменений кода Squid. Все что надо, это добавить строку -Dbind=SOCKSbind etc в строку компиляции и -lsocks в строку линков.
Здесь вид экрана ручной настройки прокси Netscape Navigator.
Здесь вид экрана автоматической настройки прокси Netscape Navigator. Вы также можете обратиться к документации Netscape по системе конфигурации прокси Navigator при помощи JavaScript по адресу http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
Здесь пример автоконфигурации на JavaScript от Oskar Pearson:
//We (www.is.co.za) run a central cache for our customers that they //access through a firewall - thus if they want to connect to their intranet //system (or anything in their domain at all) they have to connect //directly - hence all the "fiddling" to see if they are trying to connect //to their local domain. //Replace each occurrence of company.com with your domain name //and if you have some kind of intranet system, make sure //that you put it's name in place of "internal" below. //We also assume that your cache is called "cache.company.com", and //that it runs on port 8080. Change it down at the bottom. //(C) Oskar Pearson and the Internet Solution (http://www.is.co.za) ЪЪЪ function FindProxyForURL(url, host) ЪЪЪЪЪЪЪ { ЪЪЪЪЪЪЪЪЪЪЪ //If they have only specified a hostname, go directly. ЪЪЪЪЪЪЪЪЪЪЪ if (isPlainHostName(host)) ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ //These connect directly if the machine they are trying to ЪЪЪЪЪЪЪЪЪЪЪ //connect to starts with "intranet" - ie http://intranet ЪЪЪЪЪЪЪЪЪЪЪ //ConnectЪ directly if it is intranet.* ЪЪЪЪЪЪЪЪЪЪЪ //If you have another machine that you want them to ЪЪЪЪЪЪЪЪЪЪЪ //access directly, replace "internal*" with that ЪЪЪЪЪЪЪЪЪЪЪ //machine's name ЪЪЪЪЪЪЪЪЪЪЪ if (shExpMatch( host, "intranet*")|| ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ shExpMatch(host, "internal*")) ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ //Connect directly to our domains (NB for Important News) ЪЪЪЪЪЪЪЪЪЪЪ if (dnsDomainIs( host,"company.com")|| ЪЪЪЪЪЪЪЪЪЪЪ //If you have another domain that you wish to connect to ЪЪЪЪЪЪЪЪЪЪЪ //directly, put it in here ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ dnsDomainIs(host,"sistercompany.com")) ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ //So the error message "no such host" will appear through the ЪЪЪЪЪЪЪЪЪЪЪ //normal Netscape box - less support queries :) ЪЪЪЪЪЪЪЪЪЪЪ if (!isResolvable(host)) ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ //We only cache http, ftp and gopher ЪЪЪЪЪЪЪЪЪЪЪ if (url.substring(0, 5) == "http:" || ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ url.substring(0, 4) == "ftp:"|| ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ url.substring(0, 7) == "gopher:") ЪЪЪЪЪЪЪЪЪЪЪ //Change the ":8080" to the port that your cache ЪЪЪЪЪЪЪЪЪЪЪ //runs on, and "cache.company.com" to the machine that ЪЪЪЪЪЪЪЪЪЪЪ //you run the cache on ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "PROXY cache.company.com:8080; DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ //We don't cache WAIS ЪЪЪЪЪЪЪЪЪЪЪ if (url.substring(0, 5) == "wais:") ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪЪЪЪЪ else ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ return "DIRECT"; ЪЪЪЪЪЪЪ }
% setenv http_proxy http://mycache.example.com:3128/
% setenv gopher_proxy http://mycache.example.com:3128/
% setenv ftp_proxy http://mycache.example.com:3128/
Для Lynx настройки прокси можно сделать в файле lynx.cfg. При такой настройке все пользователи Lynx смогут пользоваться прокси без дополнительного задания окружения для каждого пользователя. Например:
ЪЪЪЪЪЪЪ http_proxy:http://mycache.example.com:3128/ ЪЪЪЪЪЪЪ ftp_proxy:http://mycache.example.com:3128/ ЪЪЪЪЪЪЪ gopher_proxy:http://mycache.example.com:3128/
Здесь вид экрана настройки прокси Internet Explorer.
Microsoft также собирается поддерживать как у Netscape автоматическую настройку прокси через JavaScript. Сейчас, только MSIE версии 3.0a для Windows 3.1 и Windows NT 3.51 поддерживает эту возможность (например, в версии 3.01 build 1225 для Windows 95 и NT 4.0, ее нет).
Если Ваша версия MSIE поддерживает такую возможность, выберите Options из меню View. Щелкните на закладке Advanced и в левом нижнем углу щелкните на кнопке Automatic Configuration. Впишите URL Вашего файла JavaScript. Потом перезапустите MSIE. MSIE будет пересчитывать файл JavaScript каждый раз при запуске.
Вид экрана прилагается.
В этом же окне есть кнопка вызывающая окно исключений, где можно задать хосты или домены, котрые не надо кешировать. Здесь вид экрана.
Warning: this technique has several significant shortcomings!
ЪЪЪ # ЪЪЪ # Code maturity level options ЪЪЪ # ЪЪЪ CONFIG_EXPERIMENTAL=y ЪЪЪ # ЪЪЪ # Networking options ЪЪЪ # ЪЪЪ CONFIG_FIREWALL=y ЪЪЪ # CONFIG_NET_ALIAS is not set ЪЪЪ CONFIG_INET=y ЪЪЪ CONFIG_IP_FORWARD=y ЪЪЪ # CONFIG_IP_MULTICAST is not set ЪЪЪ CONFIG_IP_FIREWALL=y ЪЪЪ # CONFIG_IP_FIREWALL_VERBOSE is not set ЪЪЪ CONFIG_IP_MASQUERADE=y ЪЪЪ CONFIG_IP_TRANSPARENT_PROXY=y ЪЪЪ CONFIG_IP_ALWAYS_DEFRAG=y ЪЪЪ # CONFIG_IP_ACCT is not set ЪЪЪ CONFIG_IP_ROUTER=yЗдесь http://www.xos.nl/linux/ipfwadm/ возьмите исходники ipfwadm и установите его. Ipfwadm понадобится для задания правил перенаправления. Я добавил эти правила в скрипт запускаемый из /etc/rc.d/rc.inet1 (Slackware) который устанавливает интерфейс в момент загрузки. Перенаправление должно быть завершено до задания любых входных правил. Чтобы убедиться, что это работает я отключил forwarding (masquerading).
/etc/rc.d/rc.firewall:
#!/bin/sh # rc.firewall Linux kernel firewalling rules FW=/sbin/ipfwadm # Flush rules, for testing purposes for i in I O F # A # If we enabled accouting too do ${FW} -$i -f done # Default policies: ${FW} -I -p rej # Incoming policy: reject (quick error) ${FW} -O -p acc # Output policy: accept ${FW} -F -p den # Forwarding policy: deny # Input Rules: # Loopback-interface (local access, eg, to local nameserver): ${FW} -I -a acc -S localhost/32 -D localhost/32 # Local Ethernet-interface: # Redirect to Squid proxy server: ${FW} -I -a acc -P tcp -D default/0 80 -r 80 # Accept packets from local network: ${FW} -I -a acc -P all -S localnet/8 -D default/0 -W eth0 # Only required for other types of traffic (FTP, Telnet): # Forward localnet with masquerading (udp and tcp, no icmp!): ${FW} -F -a m -P tcp -S localnet/8 -D default/0 ${FW} -F -a m -P udp -S localnet/8 -D default/0 Весь траффик локальной сети с любым адресом назначения перенаправляется на локальный 80 порт. Правила можно посмотреть и они будут выглядеть как-то так:
ЪЪЪ IP firewall input rules, default policy: reject ЪЪЪ typeЪ prot sourceЪЪЪЪЪЪЪЪЪЪЪЪЪЪ destinationЪЪЪЪЪЪЪЪЪ ports ЪЪЪ accЪЪ allЪ 127.0.0.1ЪЪЪЪЪЪЪЪЪЪЪ 127.0.0.1ЪЪЪЪЪЪЪЪЪЪЪ n/a ЪЪЪ acc/r tcpЪ 10.0.0.0/8ЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ * -> 80 => 80 ЪЪЪ accЪЪ allЪ 10.0.0.0/8ЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ n/a ЪЪЪ accЪЪ tcpЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ * -> *Здесь важные установки в squid.conf:
ЪЪЪ http_portЪЪЪЪЪЪЪЪЪЪЪЪЪЪ 80 ЪЪЪ icp_portЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ 3130 ЪЪЪ httpd_accelЪЪЪЪЪЪЪЪЪЪЪЪ virtual 80 ЪЪЪ httpd_accel_with_proxyЪ onВнимание, virtual это магическое слово здесь!
Я протестировал на Windows 95 как с Microsoft Internet Explorer 3.01 так и Netscape Communicator и это работает с обоими с отключенными установками прокси.
Один раз squid кажется зациклился когда я указал браузеру на локальный 80 порт. Но этого можно избежать добавив строку:
ЪЪЪ ${FW} -I -a rej -P tcp -S localnet/8 -D dec/32 80 ЪЪЪ IP firewall input rules, default policy: reject ЪЪЪ typeЪ prot sourceЪЪЪЪЪЪЪЪЪЪЪЪЪЪ destinationЪЪЪЪЪЪЪЪЪ ports ЪЪЪ accЪЪ allЪ 127.0.0.1ЪЪЪЪЪЪЪЪЪЪЪ 127.0.0.1ЪЪЪЪЪЪЪЪЪЪЪ n/a ЪЪЪ rejЪЪ tcpЪ 10.0.0.0/8ЪЪЪЪЪЪЪЪЪЪ 10.0.0.1ЪЪЪЪЪЪЪЪЪЪЪЪ * -> 80 ЪЪЪ acc/r tcpЪ 10.0.0.0/8ЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ * -> 80 => 80 ЪЪЪ accЪЪ allЪ 10.0.0.0/8ЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ n/a ЪЪЪ accЪЪ tcpЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ 0.0.0.0/0ЪЪЪЪЪЪЪЪЪЪЪ * -> *Замечание о преобразовании имен: Вместо того, чтобы просто передать URL прокси, браузер сам преобразовывает их. Удостоверьтесь, что на рабочих станциях прописаны локальные DNS сервера.
Если на брандмауэре или прокси сервере работает DNS сервер (что является хорошей идеей IMHO) пусть рабочие станции используют его.
access.log, общий формат:
ЪЪЪ Host Ident - [D/M/Yr:H:M:S TZ] "Method URL" Status Sizeaccess.log, Squid 1.0 родной формат:
ЪЪЪ Time Elapsed Host Status/HTTP/Hier_Status Size Method URLaccess.log, Squid 1.1 родной формат:
ЪЪЪ Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Hosthierarchy.log, только Squid 1.0:
ЪЪЪ [D/M/Yr:H:M:S TZ] URL Hier_Status Hier_HostЗдесь описание формата разных компонентов log:
kill -USR1 `cat /usr/local/squid/logs/squid.pid`
Примечание: Строка logfile_rotate в squid.conf делает необязательным ручное удаление старых log файлов. Просто установите значение logfile_rotate в желаемую величину. Как только значение logfile_rotate будет достигнуто, старый log будет удален автоматически. Выставите нужное значение logfile_rotate и пропишите в crontab посылку squid 'у сигнала SIGUSR1, например в полночь каждого дня:
0 0 * * * /bin/kill -USR1 `cat /usr/local/squid/logs/squid.pid`
Единственный файл, котрый нельзя удалять это log, который обычно находится в первой cache_dir директории. Этот файл содержиит данные, необходимые для восстановления кеша призапуске Squid. Удаление этого файла приведет к потере кеша.
sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25
Другой, возможно более простой, удалить файл log из директории cache_dir.Ъ
После того как Вы изменили конфигурационные файлы сервера, нужно или перезапустить web сервер, либо послать ему SIGHUP, чтобы он пересчитал файлы настройки.
Когда Вы закончите конфигурировать web сервер, то сможете подключиться браузером к кеш-менеджеру по URL:
http://www.example.com/Squid/cgi-bin/cachemgr.cgi
ЪЪЪЪЪЪЪ Protection MGR-PROT { ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ MaskЪЪЪ @(workstation.example.com) ЪЪЪЪЪЪЪ }Можно задавать шаблонами, IP адресами, в том числе и через запятую. Возможны и другие способы защиты. Обратитесь к документации по серверу.
Также следует добавить:
ЪЪЪЪЪЪЪ ProtectЪЪЪЪЪЪЪЪ /Squid/*ЪЪЪЪЪЪЪ MGR-PROT ЪЪЪЪЪЪЪ ExecЪЪЪЪЪЪЪЪЪЪЪ /Squid/cgi-bin/*.cgiЪЪЪ /usr/local/squid/bin/*.cgiчтобы отметить для MGR-PROT, что скрипт выполняемый.
ScriptAlias /Squid/cgi-bin/ /usr/local/squid/cgi-bin/Не советуем делать ScriptAlias на всю директорию /usr/local/squid/bin где лежат бинарники Squid.
Затем, надо задать рабочие станции имеющие доступ к кеш-менеджеру. Это задается в файле access.conf Apache, а не в squid.conf. В конце access.conf, вставьте:
ЪЪЪЪЪЪЪ <Location /Squid/cgi-bin/cachemgr.cgi> ЪЪЪЪЪЪЪ order deny,allow ЪЪЪЪЪЪЪ deny from all ЪЪЪЪЪЪЪ allow from workstation.example.com ЪЪЪЪЪЪЪ </Location>Можно вписать несколько строк, можно добавить домены или сети.
Также, cachemgr.cgi может быть защищен паролем. Надо добавить следующие строки в access.conf:
ЪЪЪЪЪЪЪ <Location /Squid/cgi-bin/cachemgr.cgi> ЪЪЪЪЪЪЪ AuthUserFile /path/to/password/file ЪЪЪЪЪЪЪ AuthGroupFile /dev/null ЪЪЪЪЪЪЪ AuthName User/Password Required ЪЪЪЪЪЪЪ AuthType Basic ЪЪЪЪЪЪЪ <Limit GET> ЪЪЪЪЪЪЪ require user cachemanager ЪЪЪЪЪЪЪ </Location>В документации Apache Вы найдете информацию об использовании htpasswd для задания пароля.
ЪЪЪЪЪЪЪ acl manager proto cache_object ЪЪЪЪЪЪЪ acl localhost src 127.0.0.1/255.255.255.255 ЪЪЪЪЪЪЪ acl all src 0.0.0.0/0.0.0.0Со следующими правами:
ЪЪЪЪЪЪЪ http_access deny manager !localhost ЪЪЪЪЪЪЪ http_access allow allПервая запись в ACL нужна для кеш-менеджера, так как он для опроса squid использует специальный cache_object протокол. Можете сами попробовать:
telnet mycache.example.com 3128
GET cache_object://mycache.example.com/info HTTP/1.0
По умолчанию, если запрос для cache_object, и запрос не с локальной машины, то доступ будет закрыт, в противном случае - открыт.
Фактически, так как доступ разрешен только с локальной машины, то в поле cachemgr.cgi можно указать в качестве кеш хоста localhost. Мы рекомендуем следующее:
ЪЪЪЪЪЪЪ acl manager proto cache_object ЪЪЪЪЪЪЪ acl localhost src 127.0.0.1/255.255.255.255 ЪЪЪЪЪЪЪ acl example src 123.123.123.123/255.255.255.255 ЪЪЪЪЪЪЪ acl all src 0.0.0.0/0.0.0.0Где 123.123.123.123 это IP адрес Вашего web сервера. Затем измените правила так:
ЪЪЪЪЪЪЪ http_access deny manager !localhost !example ЪЪЪЪЪЪЪ http_access allow allПо умолчанию подразумевается, что web сервер находится на той же машине, что и squid. Учтите, что обращение кеш-менеджера к squid происходит через web сервер, а не браузер. Так что, если Ваш web сервер находится где-то в другом месте, IP адрес web сервера, на котором установлен cachemgr.cgi должен быть указан вместо example в вышеприведенном примере.
Не забывайте каждый раз после изменения squid.conf посылать SIGHUP squid'у.
ЪЪЪЪЪЪЪ HOST_OPTЪЪЪЪЪЪЪ = # -DCACHEMGR_HOSTNAME="getfullhostname()"Если web сервер с cachemgr.cgi запущен на той же машине, что и Squid просто уберите #. Если же web сервер какой-то другой, то:
ЪЪЪЪЪЪЪ HOST_OPTЪЪЪЪЪЪЪ = -DCACHEMGR_HOSTNAME=\"mycache.example.com\"После этих изменений следует перекомпилировать и переустановить cachemgr.cgi.
Если squid занимает гораздо меньше, чем в этом поле, будьте осторожны! Что-то не так, следует перезапустить squid.
Для колонки Flags:
Колонка N это число IP адресов, которые имеет данный hostname.
В конце строки перечислены остальные IP адреса, относящиеся к этой записи в IP cache.
ЪЪЪЪЪЪЪ Memory usage for squid via mallinfo(): ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Total space in arena:ЪЪ 94687 KB ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Ordinary blocks:ЪЪЪЪЪЪЪ 32019 KB 210034 blks ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Small blocks:ЪЪЪЪЪЪЪЪЪЪ 44364 KB 569500 blks ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Holding blocks:ЪЪЪЪЪЪЪЪЪЪЪЪ 0 KBЪЪ 5695 blks ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Free Small blocks:ЪЪЪЪЪЪ 6650 KB ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Free Ordinary blocks:ЪЪ 11652 KB ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Total in use:ЪЪЪЪЪЪЪЪЪЪ 76384 KB 81% ЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Total free:ЪЪЪЪЪЪЪЪЪЪЪЪ 18302 KB 19% ЪЪЪЪЪЪЪ Meta Data: ЪЪЪЪЪЪЪ StoreEntryЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ 246043 x 64 bytes =Ъ 15377 KB ЪЪЪЪЪЪЪ IPCacheEntryЪЪЪЪЪЪЪЪЪЪЪЪЪ 971 xЪЪ 88 bytesЪ =ЪЪЪЪ 83 KB ЪЪЪЪЪЪЪ Hash linkЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ 2 xЪЪ 24 bytesЪЪЪ =ЪЪЪЪЪ 0 KB ЪЪЪЪЪЪЪ URL stringsЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ =Ъ 11422 KB ЪЪЪЪЪЪЪ Pool MemObject structures 514 xЪ 144 bytesЪ =ЪЪЪЪ 72 KB (ЪЪЪ 70 free) ЪЪЪЪЪЪЪ Pool for Request structur 516 x 4380 bytesЪ =ЪЪ 2207 KB (Ъ 2121 free) ЪЪЪЪЪЪЪ Pool for in-memory object 6200 x 4096 bytes =Ъ 24800 KB ( 22888 free) ЪЪЪЪЪЪЪ Pool for disk I/OЪЪЪЪЪЪЪЪ 242 x 8192 bytes =ЪЪ 1936 KB (Ъ 1888 free) ЪЪЪЪЪЪЪ MiscellaneousЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ =ЪЪ 2600 KB ЪЪЪЪЪЪЪ total AccountedЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ =Ъ 58499 KBВ первой строке mallinfo() сообщает, что используетсяr 94M. Это значение близко к тому, что показывает top (97M).
Из этих 94M, 81% (76M) реально используется в этот момент. Остальное высвобождено, или зарезервировано malloc(3) и пока не используется.
Из 76M используемых, можно рассчитывать на 58.5M (76%). Остальное отведено под вызовы malloc(3).
Список Meta Data содержит информацию о том, куда потрачена доступная память. 45% ушло на StoreEntry и хранение URL строк. Другие 42% потрачены на хранение объектов в виртуальной памяти, пока они доставляются клиентам (Pool for in-memory object).
Размеры пула задаются в squid.conf. В версии 1.0, они несколько туповатые: там хранится стек неиспользованных страниц, вместо того чтобы освобождать этот блок. В Pool for in-memory object, размер этого стека составляет 1/2 cache_mem. Размер Pool for disk I/O жестко задан в 200. Для MemObject и Request это 1/8 величины FD_SETSIZE.
Если Вам нужно снизить количество памяти процесса, мы рекомендуем уменьшить максимальные размеры объектов в строках 'http', 'ftp' и 'gopher' конфигурации. Также можно уменьшить cache_mem. Но если сделать cache_mem слишком маленьким, то некоторые объекты могут не сохраняться на диск при большой загрузке. Новые версии Squid позволяют задать memory_pools off отключая таким образом пул свободной памяти.
Например:
============================================================================== IP Cache Contents: ЪHostnameЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Flags lstrefЪЪЪ TTLЪ N [IP-Number] Ъgorn.cc.fh-lippe.deЪЪЪЪЪЪЪЪЪЪЪЪЪЪ CЪЪЪЪЪЪ 0Ъ 21581 1 193.16.112.73 Ъlagrange.uni-paderborn.deЪЪЪЪЪЪЪЪ CЪЪЪЪЪЪ 6Ъ 21594 1 131.234.128.245 Ъwww.altavista.digital.comЪЪЪЪЪЪЪЪ CЪЪЪЪЪ 10Ъ 21299 4 204.123.2.75Ъ 204.74.103.37ЪЪЪ 204.123.2.66ЪЪЪ 204.123.2.69 Ъ2/ftp.symantec.comЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ DLЪЪ 1583 -772855 0ЪЪ Flags:Ъ C --> В кеше ЪЪЪЪЪЪЪ D --> Отправлен ЪЪЪЪЪЪЪ N --> Не кеширован ЪЪЪЪЪЪЪ L --> Блокирован lstref: Время с момента последнего использования ЪЪ TTL: Time-To-Live (время жизни) пока не истечет срок хранения информации ЪЪЪЪ N: Число адресов ============================================================================== FQDN Cache Contents: ЪIP-NumberЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ Flags TTL(?) N Hostname]Ъ Ъ130.149.17.15ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ C -45570 1 andele.cs.tu-berlin.de Ъ194.77.122.18ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ C -58133 1 komet.teuto.de Ъ206.155.117.51ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ N -73747 0 ЪFlags: C --> В кеше ЪЪЪЪЪЪЪ D --> Отправлен ЪЪЪЪЪЪЪ N --> Не кеширован ЪЪЪЪЪЪЪ L --> Блокирован ЪЪ TTL: Time-To-Live ЪЪЪЪ N: Число имен
http_accel_with_proxy on
Также, возможно Вы неправильно задали ACL. Проверьте файлы access.log и squid.conf.
Директива local_domain не запрещает кешировать локальные объекты. Она предотвращает использование братских кешей для локальных объектов. Если Вам все таки это нужно, то воспользуйтесь опциями cache_stoplist или http_stop (в зависимости от версии).
Для Linux, есть патч filehandle.patch.linux от Michael O'Reilly <michael@metal.iinet.net.au>.
Для Solaris, добавьте следующее в файл /etc/system:
set rlim_fd_max = 4096
set rlim_fd_cur = 1024
Также следует задать #define SQUID_FD_SETSIZE в include/config.h в то же значение, что и rlim_fd_max. Не следует задавать меньше 4096.
Solaris select(2) позволяет задать только 1024 дескриптора, если надо больше отредактируйте src/Makefile и разрешите $(USE_POLL_OPT). Потом пересоберите squid.
Для FreeBSD (от Torsten Sturm <torsten.sturm@axis.de>):
ЪЪЪ cd squid-1.1.x ЪЪЪ make realclean ЪЪЪ ./configure --prefix=/usr/local/squid ЪЪЪ make
optionsЪЪЪЪЪЪЪЪ DFLDSIZ=67108864ЪЪЪЪЪЪЪ # 64 meg default max data size (was 16) optionsЪЪЪЪЪЪЪЪ MAXDSIZ=134217728ЪЪЪЪЪЪ # 128 meg max data size (was 64)Пересоберите ядро и перезагрузите машину.Ъ
В Digital UNIX, отредактируйте файл /etc/sysconfigtab и добавьте строку...
proc: ЪЪЪЪЪЪЪ per-proc-data-size=1073741824Или, в csh, используя команду limit ...
Редактирование /etc/sysconfigtab требует перезагрузки, а команда limit - нет.
97/01/23 22:31:10| Removed 1 of 9 objects from bucket 3913 97/01/23 22:33:10| Removed 1 of 5 objects from bucket 4315 97/01/23 22:35:40| Removed 1 of 14 objects from bucket 6391Обычные строки log файла, но они не значат, что squid достиг cache_swap_high.
На странице cache information вcachemgr.cgi найдите строку типа этой:
ЪЪЪЪЪЪ Storage LRU Expiration Age:ЪЪЪЪ 364.01 daysОбъекты, которые не использовались данное количество времени, удаляются как результат регулярных работ. Вы можете задать собственное значение LRU Expiration Age при помощи reference_age в конфигурационном файле.
FATAL: Don't run Squid as root, set 'cache_effective_user'!Однако, если установить cache_effective_user не в nobody, то все ОК. Первое решение, это создать пользователя для Squid и установить для него cache_effective_user.
Также можно поменять UID nobody с 65535 на 65534.
Дальше надо выбрать сервер (должен быть только один), потом выберите "Properties" из меню, закладку "directories", будет опция "Directory listing style." Выберите "Unix" type, а не "MS-DOS" type.
--Oskar Pearson <oskar@is.co.za>(1) Если на том конце несколько интерфейсов и пакеты идут с того, который не прописан в DNS. Вообще-то, это их проблема. Вы можете сказать им или прописать IP адрес интерфейса в DNS, или использовать опцию Squid 'udp_outgoing_address'.
Например:
# (squid.conf родительского кеша) # udp_outgoing_address proxy.parent.com # (Ваш squid.conf) # cache_host proxy.parent.com parent 3128 3130(2) Также это сообщение будет появляться при посылке ICP запросов на несколько адресов. Для обеспечения безопасности, Squid требует задания в конфигурации списка других кешей, слушающих группу адресов. Если неизвестный кеш слушает этот адрес и шлет ответы, ваш кеш будет писать в log эти сообщения. Чтобы исправить надо, либо сказать этому кешу перестать слушать адреса, или, если он законный, добавьте его в файл конфигурации.Ъ
ICP прежде всего используется в иерархии кешей для поиска определенных объектов в братских кешах. Если squid не находит нужного документа, то посылает ICP запрос братским кешам, которые в свою очередь отвечают ICP ответами "HIT" ("попадание") или "MISS" ("промах"). Затем кеш использует ответы для выбора при помощи какого кеша разрешать свои ответы MISS.
ICP также поддерживает сложные передачи множества объектов через одно TCP соединение. ICP сейчас работает поверх UDP. Текущие версии Squid также поддерживают множественные запросы ICP.
У Squid не должен блокироваться процесс ввода/вывода, поэтому DNS обращения выполнены как внешний к основному процесс. Процессы dnsserver не кешируют запросы DNS, это делается самим squid`ом.
На данный момент нет, для поддержки этого нужна будет программа ftpput.
Кроме родительских/дочерних отношений, squid поддерживает понятие братских кешей, то есть находящихся на одном уровне иерархии, призванных распределить нагрузку. Каждый кеш в иерархии независимо ни от кого решает откуда брать объект, либо с сервера в Internet, либо с родительского или братского кеша, используя простой механизм разрешения. Братские кеши не будут забирать объект для другого кеша того же уровня, получив от них "промах".
Директива single_parent_bypass предотвращает рассылку ICP запросов, в случае когда соответствующий братский кеш это родительский (то есть, если больше неоткуда брать объект, зачем напрасно запрашивать?)
Текущий список будущих возможностей, доступен здесь http://squid.nlanr.net/Squid/Devel/todo.html.
Разработчикам будущих версий следует обратиться сюда http://squid.nlanr.net/Squid/Devel/.
Last-modified: Tue, 01 Dec 1998 21:18:05 GMT