SQUID Часто задаваемые вопросы --------------------------------------------------------------- Оригинал этого текста расположен на странице http://www.atals.net.ru/Squid-faq.html Ў http://www.atals.net.ru/Squid-faq.html ---------------------------------------------------------------
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 прокси, браузер сам преобразовывает их. Удо