Библиотека сайта rus-linux.net
Часто задаваемые вопросы
- 1 О Squid, этот FAQ, и другая информация по Squid
- 1.1 Что такое Squid?
- 1.2 Что такое кеширование объектов интернет?
- 1.3 Почему Squid?
- 1.4 Какая последняя версия Squid?
- 1.5 Кто автор Squid?
- 1.6 Где можно взять Squid?
- 1.7 Где подписаться на список рассылки Squid?
- 1.8 Web страницы посвященные Squid
- 1.9 Какой официальный статус Squid?
- 1.10 Распространители Squid FAQ
- 2 Инсталляция
- 2.1 Какие файлы следует брать?
- 2.2 Как мне установить Squid?
- 2.3 На каких операционных системах работает Squid?
- 2.4 Для чего нужен файл squid.conf?
- 2.5 А есть ли пример squid.conf?
- 2.6 Как мне запустить squid?
- 2.7 Как мне узнать что Squid запущен?
- 2.8 Как использовать патчи?
- 3 Конфигурирование
- 3.1 Как сделать иерархию прокси?
- 3.2 Как мне подключиться к иерархии NLANR?
- 3.3 Почему я должен подключаться к иерархии NLANR?
- 3.4 Как мне зарегистрировать свой кеш на NLANR?
- 3.5 Как мне найти ближайшие ко мне кеши и организовать родительские/дочерние/братские отношения с ними?
- 3.6 Что такое режим httpd-ускорителя?
- 3.7 Как мне задать, чтобы Squid работал за брандмауэром?
- 3.8 У меня несколько dnsserver процессов, которые не используются, могу я уменьшить их число в squid.conf?
- 3.9 Мы бы хотели использовать Squid, но нам нужно использовать socks для подключения к внешнему миру. Поддерживает ли Squid Socks?
- 3.10 Как Squid решает когда обновить объект кеша?
- 4 Squid и браузеры
- 4.1 Ручная настройка Netscape
- 4.2 Автоматическая настройка Netscape
- 4.3 Настройка Lynx и Mosaic
- 4.4 Настройка Microsoft Internet Explorer
- 4.5 Настройка Netmanage Internet Chameleon WebSurfer
- 4.6 Как сделать, чтобы пользователи браузеров пользовались кешем без их настройки?
- 5 Описание работы
- 5.1 Как посмотреть системную статистику работы Squid?
- 5.2 Что я могу узнать из log файлов?
- 5.3 Какие log файлы я могу удалять?
- 5.4 Как мне найти самый большой объект кеша?
- 5.5 Я хочу перезапустить Squid с чистым кешем
- 6 Кеш-менеджер
- 6.1 Что такое кеш-менеджер?
- 6.2 Как его установить?
- 6.3 Настройка CERN httpd 3.0 для работы с кеш-менеджером
- 6.4 Настройка Apache для работы с кеш-менеджером
- 6.5 Задание ACL (списка пользователей) для кеш-менеджера в squid.conf
- 6.6 Почему он спрашивает у меня какой-то пароль и URL?
- 6.7 Я хочу удаленно остановить кеш. Какой пароль?
- 6.8 Как сделать, чтобы в поле cache host по умолчанию было имя моего кеша?
- 6.9 Какая разница между TCP и UDP соединениями Squid?
- 6.10 Он говорит, что срок хранения кеша истечет в 1970 году!
- 6.11 Что значат записи мета-данных?
- 6.12 Pool for in-memory objects огромен и не становится меньше! Это что утечка памяти?
- 6.13 Значение поля "Total accounted" не совпадает с размером занимаемым моим squid!
-
6.14 В разделе utilization, что есть
Other
? -
6.15 В разделе utilization, почему колонка
Transfer KB/sec
всегда нулевая? -
6.16 В разделе utilization, что значит
Object Count
? -
6.17 В разделе utilization, что значит
Max/Current/Min KB
? -
6.18 О чем раздел
I/O
? -
6.19 Что находится в разделе
Objects
? -
6.20 Для чего раздел
VM Objects
? -
6.21 Что значит
AVG RTT
? - 6.22 В разделе IP cache , какая разница между hit, negative hit и miss?
- 6.23 Что значит содержимое раздела IP cache?
- 6.24 Как анализировать использование памяти из данных cachemgr.cgi?
- 6.25 Что такое fqdncache и чем отличается от ipcache?
- 7 Troubleshooting
- 7.1 Почему у меня нет доступа к прокси: "Proxy Access Denied"?
-
7.2 Не работает
local_domain
. -
7.3 Когда кеш пытается получить объект с братского кеша,
получает
Connection Refused,
даже когда тот кеш считает, что объект получен успешно. - 7.4 Не хватает файловых дескрипторов
-
7.5 Мой squid периодически вываливается с ошибкой,
что не может
malloc(3)
больше памяти, но у меня достаточно ОЗУ! - 7.6 Что за странные строки об удалении объектов?
-
7.7 Почему я не могу задать
cache_effective_user
вnobody
под Linux? - 7.8 Могу я указать Windows NT FTP серверу выводить директории в Unix формате?
- 7.9 Почему так часто появляются сообщения ERR_NO_CLIENTS_BIG_OBJ?
- 7.10 Почему Squid требует так много памяти!?
- 7.11 Почему я получаю "Ignoring MISS from non-peer x.x.x.x"?
- 8 Как Squid работает?
- 8.1 Какие объекты кешируются?
- 8.2 Что за протокол ICP?
- 8.3 Что такое dnsserver?
- 8.4 Для чего нужна программftpget?
- 8.5 FTP PUT не работает
- 8.6 Что такое иерархия кешей? Что такое родительские и братские кеши?
- 8.7 Каков алгоритм разрешения кеша Squid?
- 8.8 Над какими возможностями Squid разработчики сейчас работают?
- 8.9 Где найти информацию о загрузке Internet трафика
- 8.10 Какие преимущества кеширования совместно с кеширующей системой NLANR?
- 8.11 Где найти информацию по брандмауэрам?
1 О Squid, этот FAQ, и другая информация по Squid
1.1 Что такое Squid?
Squid это высокопроизводительный кеширующий прокси для web клиентов, поддерживающий ftp, gopher, и http. В отличии от традиционных кеширующих программ, Squid все запросы выполняет как один, неблокируемый процесс ввода/вывода. Squid сохраняет часто запрашиваемые данные в ОЗУ, кеширует DNS запросы, не блокируется при выполнении DNS запросов, и не кеширует неудавшиеся запросы. Также поддерживает SSL, расширенный контроль доступа и полную регистрацию запросов. Используя Internet Cache Protocol (ICP), кеши Squid можно расположить иерархически для дополнительного выигрыша в пропускной способности канала.Squid состоит из - основной программы squid, программы обработки DNS запросов dnsserver, программы скачивания ftp данных ftpget, а также некоторых инструментов управления. Когда squid запускается, он запускает заданное число dnsserver-ов, каждый из которых работает самостоятельно, блокируя только DNS запросы. Таким образом уменьшается общее время ожидания ответа DNS.
Squid берет свое начало с основанного ARPA проекта Harvest. http://harvest.cs.colorado.edu/
1.2 Что такое кеширование объектов интернет?
Это способ хранения запрошенных из Интернет объектов (например, данных доступных по http, ftp и gopher протоколам) на сервере, находящемся ближе к запрашивающему компьютеру нежели исходный. Браузеры могут потом использовать Squid кеш как http прокси-сервер, уменьшая как время доступа, так и загрузку канала.1.3 Почему Squid?
Harris' Lament отвечает, "All the good ones are taken." - "Все лучшие названия уже расхватали"Нам нужно было как-то отличаться от кеша Harvest. Squid было кодовое название на начальной стадии разработки, а потом оно прилипло.
1.4 Какая последняя версия Squid?
Squid обновляется часто; о последних изменениях смотрите здесь http://squid.nlanr.net/Squid/1.5 Кто автор Squid?
Squid это результат усилий нескольких людей из сообщества Internet. Возглавляет проект Duane Wessels из National Laboratory for Applied Network Research (основанной National Science Foundation).1.6 Где можно взять Squid?
Вы можете взять по ftp здесь: Также много зеркал по всему миру:1.7 Где подписаться на список рассылки Squid?
- squid-users@nlanr.net: общая информация о Squid.
- squid-users-digest: дайджест (ежедневный) того же.
- squid-announce@nlanr.net: Анонс новых версий (только получение).
- squid-bugs@nlanr.net : Закрытый список для сообщения о багах.
- squid@nlanr.net: Закрытый список с пожеланиями и предложениями.
- squid-faq@nlanr.net: Закрытый список для обратной связи, обновлений и дополнений в Squid FAQ.
Подписка через squid-users-request@nlanr.net
Подписка через squid-users-digest-request@nlanr.net
Подписка через squid-announce-request@nlanr.net
1.8 Web страницы посвященные Squid.
Здесь информация по программе Squid http://squid.nlanr.net/Squid/, а здесь http://www.nlanr.net/Cache/ дополнительная информация по кешированию вообще.1.9 Какой официальный статус Squid?
Из дистрибутива Squid, файл README: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.
1.10 Распространители Squid FAQ
Jonathan Larmour <JLarmour@origin-at.co.uk>Cord Beermann <cord@cc.fh-lippe.de>
Tony Sterrett <tony@nlanr.net>
Gerard Hynes <ghynes@compusult.nf.ca>
Duane Wessels <wessels@nlanr.net>
K Claffy <kc@nlanr.net>
Paul Southworth <pauls@etext.org>
Пожалуйста шлите исправления, обновления и комментарии на: squid-faq@nlanr.net.
2 Инсталляция
2.1 Какие файлы следует брать?
Необходимо скачать архив исходников следующего вида squid-x.y.z-src.tar.gz (например, squid-1.1.6-src.tar.gz) с http://squid.nlanr.net/Squid/. Содержание различий между версиями доступно для апгрейда, которые применяются программой patch, которую можно взять здесь ftp://prep.ai.mit.edu/pub/gnu/.2.2 Как мне установить Squid?
Прежде всего необходимо распаковать исходный архив, следующим образом:% 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
2.3 На каких операционных системах работает Squid?
Это ПО разрабатывалось для работы на любых современных Unix системах, и известно что работает на AIX, FreeBSD, HP-UX, IRIX, Linux, OSF/1, Solaris, и SunOS. Если Вы обнаружили специфичные для данной платформы проблемы, пожалуйста дайте нам знать по email: squid-bugs@nlanr.net.2.4 Для чего нужен файл squid.conf?
Файл squid.conf задает конфигурацию squid. Конфигурация включает в себя (но не ограничивается этим) номер порта HTTP , номер порта для ICP запросов, приходящие и исходящие запросы, информацию о доступе к брандмауэру, и значения различных таймаутов.2.5 А есть ли пример squid.conf?
Да, после того как Вы успешно проделалиmake install
, пример файла
squid.conf будет находиться в поддиректории "etc" инсталяционной
директории Squid. Пример squid.conf содержит комментарии объясняющие
каждую опцию.
2.6 Как мне запустить squid?
После редактирования конфигурационного файла, можно запустить squid из скрипта RunCache. Если Вы устанавливали в директорию по умолчанию то команда для запуска будет следующей:/usr/local/squid/bin/RunCache &
2.7 Как мне узнать что Squid запущен?
Для этого есть программа client:% 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.
2.8 Как использовать патчи?
Необходима программаpatch
. Обычно достаточно:
??? cd squid-1.1.x ??? patch < /tmp/fixes.patchНо время от времени могут попадаться патчи созданные из директории 'src', тогда нужно:
??? cd squid-1.1.x/src ??? patch < /tmp/fixes.patchЕсли программа
patch
будет чем-то недовольна и будет отказываться
работать надо будет взять более новую версию, например здесь
GNU FTP site.?
3 Конфигурирование
3.1 Как сделать иерархию прокси?
Чтобы разместить кеш в иерархии, нужно воспользоватьсяcache_host
директивой в squid.conf, чтобы указать родительский и братский (или
сестринский :)
- т.е. одного уровня) узел.
Например, приведенный ниже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.
3.2 Как мне подключиться к иерархии NLANR?
Существует простой набор правил подключения к иерархии кешей NLANR.3.3 Почему я должен подключаться к иерархии NLANR?
Иерархия NLANR может являться начальным источником родительских и братских кешей. Подключение к системе глобальных кешей NLANR чаще всего сопровождается повышением производительности.3.4 Как мне зарегистрировать свой кеш на NLANR?
Просто включите эти опции в своем squid.conf и все:cache_announce 24 announce_to sd.cache.nlanr.net:3131Примечание: анонсирование кеша это не тоже самое что вступление в иерархию NLANR. Вы можете вступить в иерархию NLANR без регистрации, и можно зарегистрироваться без вступления в иерархию кешей NLANR.
3.5 Как мне найти ближайшие ко мне кеши и организовать родительские/дочерние/братские отношения с ними?
Посетите NLANR регистрацонную БД кешей и поищите ближайший. Да, и помните, что если кеш зарегистрирован в базе это еще не значит что он захочет быть Вашим родителем/дочерью/братом. Но спросить всегда можно...3.6 Что такое режим httpd-ускорителя?
Часто люди испытывают трудности в понимании ускорителей и кеширующих прокси, обычно приводящих к путанице в понимании "приходящих" и "исходящих" данных. Рассмотрим это в терминах запросов (например, исходящий запрос - это с локальной машины в большой плохой Интернет) Данные принимаемые в ответ - это приходящий. Обратный смысл получается если его рассматривать как "запрос для приходящих данных".Ускоритель кеширует приходящие запросы для исходящих данных (например, тех что Вы опубликовали на своем сервере). Тем самым он забирает загрузку с Вашего 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.
3.7 Как мне задать, чтобы Squid работал за брандмауэром?
Когда Вы находитесь за брандмауэром Вы не можете напрямую соединяться с внешним миром, так что необходимо использовать родительский кеш. Squid не использует ICP запросы если он за брандмауэром, или если только один родитель.Нужно воспользоваться директивой inside_firewall
в squid.conf
чтобы задать список внутренних по отношению к брандмауэру доменов. Например:
inside_firewall example.com
Можно задать несколько:
inside_firewall example.com example.org example.net
Использование inside_firewall
приводит к двум путям выбора
сервера. Объекты не подпадающие ни под один из перечисленных доменов будут
рассматриваться вне брандмауэра. Для этого же случая:
- Не будет DNS запросов для URL этого хоста.
- Кеш будет всегда забирать объект с одного из родительского или братского кеша.
none
чтобы все
запросы обслуживались братскими или родительскими кешами.
3.8 У меня несколько dnsserver процессов, которые не используются, могу я уменьшить их число в squid.conf?
Процессы dnsserver используются squid из-за того, что процесс преобразования имен хостов в IP-адреса (gethostbyname(3)
) блокируется
(то есть этот процесс должен дождаться ответа). Так как процесс squid
один, то каждый, кто к обращается к кешу должен ждать каждый раз время
необходимое на преобразование. Вот почему dnsserver это отдельный
процесс, так что он может блокироваться без блокировки самого squid.
Поэтому очень важно чтобы было достаточно dnsserver процессов чтобы обработать каждое обращение, в противном случаеsquid может неожиданно повисать. На практике надо определить максимальное число dnsserver-ов, которые могут понадобиться squid, и добавить еще два на всякий случай. Другими словами, если Вы видели в работе только три dnsserver процесса, оставьте как минимум пять. И помните, чтоdnsserver маленький и при простое особо не загружает систему.
3.9 Мы бы хотели использовать Squid, но нам нужно использовать socks для подключения к внешнему миру. Поддерживает ли Squid Socks?
From: carson@lehman.comDate: Sat, 25 Jan 1997 11:50:59 -0500
Subject: Re: SOCKS
Чтобы пользоваться socks5, не требуется никак изменений кода Squid.
Все что надо, это добавить строку -Dbind=SOCKSbind
etc в строку
компиляции и -lsocks
в строку линков.
3.10 Как Squid решает когда обновить объект кеша?
Kolics Bertold сделал прекрасную блок-схему изображающую этот процесс.?4 Squid и браузеры
Большинств доступных web браузеров поддерживают прокси и легко конфигурируются для поддержки Squid в качестве прокси. Некоторые из них поддерживают расширенные возможности такие как список доменов или URL шаблоны которые не следует кешировать, или JavaScript для автоматической настройки.4.1 Ручная настройка Netscape
Выберите Network Preferences из меню Options. На закладке Proxies, щелкните на Manual Proxy Configuration а затем на кнопке View. Для каждого протокола который поддерживает Ваш Squid (по умолчанию, HTTP, FTP, и gopher) введите имя или IP адрес Squid и номер порта (по умолчанию 3128) в колонке Port. Для тех протоколов, которые Ваш Squid не поддерживает оставьте поля пустыми.Здесь вид экрана ручной настройки прокси Netscape Navigator.
4.2 Автоматическая настройка Netscape
Настройка прокси Netscape Navigator может быть атоматизирована при помощи JavaScript (для версий Navigator 2.0 или выше). Выберите Network Preferences из меню Options. На закладке Proxies, щелкните на Automatic Proxy Configuration и впишите URL Вашего файла JavaScript конфигурации прокси.Здесь вид экрана автоматической настройки прокси 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"; ??????? }
4.3 Настройка Lynx и Mosaic
Для Mosaic и Lynx, надо задать переменные окружения перед запуском. Например (для csh или tcsh):% 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/
4.4 Настройка Microsoft Internet Explorer
Выберите Options из меню View. Щелкните на закладке Connection. Выберите Connect through Proxy Server и нажмите кнопку Proxy Settings. Для каждого протокола который поддерживает Ваш Squid (по умолчанию, HTTP, FTP, и gopher) введите имя или IP адрес Squid и номер порта (по умолчанию 3128) в колонке Port. Те протоколы, которые Ваш Squid не поддерживает оставьте зти поля пустыми.Здесь вид экрана настройки прокси 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 каждый раз при запуске.
4.5 Настройка Netmanage Internet Chameleon WebSurfer
Netmanage WebSurfer поддерживает ручную настройку прокси и список исключений хостов или доменов не подлежащих кешированию (информация по версии WebSurfer 5.0). Выберите Preferences из меню Settings. Щелкните на закладке Proxies. Выберите опцию Use Proxy для HTTP, FTP, и gopher. Затем для каждого протокола введите имя или IP адрес Squid и номер порта (по умолчанию, 3128) в поле Port. Остальные поля оставьте пустыми.Вид экрана прилагается.
В этом же окне есть кнопка вызывающая окно исключений, где можно задать хосты или домены, котрые не надо кешировать. Здесь вид экрана.
4.6 Как сделать, чтобы пользователи браузеров пользовались кешем без их настройки?
Можно сделать прозрачное кеширование на Linux, Solaris, и BSD версиях. Смысл в том, что операционная система перенаправляет некоторые IP пакеты приложению. Этот документ на данный момент содержит инструкции по настройке прозрачного кеширования на Linux и Solaris.4.6.1 Прозрачный прокси для Solaris, SunOS, и BSD систем
Ищите здесь http://cheops.anu.edu.au/~avalon/ip-filter.html4.6.2 Прозрачный прокси для Linux
[Contributed by Rodney van den Oever <Rodney.van.den.Oever@tip.nl>]Warning: this technique has several significant shortcomings!
- В файле access.log не отображаются имена хостов в URL.
-
Вместо этого печатаются исходные IP адреса. Это из-за того, что адрес назначения
определяется системным вызовом
getsockname(2)
. Это значит, что родительский или братский кеш работают не корректно. Сами эти кеши пишут в URL'е имена, а не IP адреса. Эти URL'ы разные и не происходит попадания в кеш при повторном запросе. Это значит, что Вы теряете преимущество от иерархического прокси, если используете прозрачное кеширование. - Данный метод поддерживает только HTTP протокол, и не поддерживает gopher или FTP
- Так как в браузере не установлена поддержка прокси, то он использует FTP протокол (с 21 портом назначения), а не требуемый HTTP. Нельзя задать правила перенаправления на прокси, так как браузер использует другой протокол. Та же ситуация и с gopher. Обычно все запросы к прокси транслируются клиентом в HTTP протокол, но раз клиент ничего не знает о перенаправлении, то ничего не происходит.
??? # ??? # 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) пусть рабочие станции используют его.
5 Описание работы
5.1 Как посмотреть системную статистику работы Squid?
В состав дистрибутива Squid входит CGI утилита cachemgr.cgi для просмотра статистики squid через браузер. Для большей информации обратитесь к разделу, посвященному cachemgr.cgi.5.2 Что я могу узнать из log файлов?
Файлы содержат различную информацию о загрузке и производительностиe Squid. В log пишутся кроме информации о доступе, еще и системные ошибки и информация о потреблении ресурсов, таких, например, как память или дисковое пространство. Ниже описан формат log файлов Squid: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:
-
Host
- IP адреса запрашиваемых хостов (в версии v1.1, если задано может быть FQDN).
-
Ident
- Обычно '-'. В версии 1.1 ответ Ident (RFC 931), если задано.
-
Method
- GET, HEAD, POST для TCP запросов или ICP_QUERY для UDP запросов.
-
URL
- Запрашиваемый объект.
-
Status
- Результат запроса (TCP_HIT для ранее кешируемых объектов, TCP_MISS если запрашиваемый объект взят не из локального кеша, UDP_HIT и UDP_MISS то же для братских запросов).
-
HTTP
- Возвращаемый HTTP код: 200 для удачных, 000 для UDP запросов, 403 для перенаправлений, 500 для ошибок, и т.д.
-
Size
- Количество байт переданных клиенту.
-
Hier_Status
- Результат запросов к братским/родительским кешам. Может быть PARENT_MISS, SIBLING_HIT и т.д.
-
Hier_Host
- Хост, с которого взят объект.
-
Time
- Время с Jan 1, 1970 в миллисекундах.
-
Elapsed
- Затраченное время в миллисекундах.
5.3 Какие log файлы я могу удалять?
Чтобы сохранить log файлы, лучше послать процессу squid сигнал USR1. Это приведет к тому, что текущие log файлы будут закрыты и переименованы. После этого можно удалять старые log файлы. Например,если Ваш файл squid.pid находится в/usr/local/squid/logs/squid.pid (как задано в squid.conf) надо сделать следующее: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.
Удаление этого файла приведет к потере кеша.
5.4 Как мне найти самый большой объект кеша?
sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25
5.5 Я хочу перезапустить Squid с чистым кешем
Первый способ, добавить-z
в командной строке.
Другой, возможно более простой, удалить файл log
из директории
cache_dir
.?
6 Кеш-менеджер
[Contributed by Jonathan Larmour <JLarmour@origin-at.co.uk>]6.1 Что такое кеш-менеджер?
Кеш-менеджер (cachemgr.cgi) это CGI утилита для просмотра статистики работающего процесса squid. Кеш-менеджер это простой способ управления кешем и просмотра статистики без захода на сервер.6.2 Как его установить?
Прежде всего это зависит от web сервера, который Вы используете. Ниже Вы найдете инструкции по настройке CERN и Apache серверов для пользования cachemgr.cgi.После того как Вы изменили конфигурационные файлы сервера, нужно или
перезапустить web сервер, либо послать ему SIGHUP
, чтобы он пересчитал
файлы настройки.
Когда Вы закончите конфигурировать web сервер, то сможете подключиться браузером к кеш-менеджеру по URL:
http://www.example.com/Squid/cgi-bin/cachemgr.cgi
6.3 Настройка CERN httpd 3.0 для работы с кеш-менеджером
Во-первых, следует убедиться, что только указанные рабочие станции имеют доступ к кеш-менеджеру. Их надо задать в CERN httpd.conf, а не в squid.conf.??????? Protection MGR-PROT { ???????????????? Mask??? @(workstation.example.com) ??????? }Можно задавать шаблонами, IP адресами, в том числе и через запятую. Возможны и другие способы защиты. Обратитесь к документации по серверу.
Также следует добавить:
??????? Protect???????? /Squid/*??????? MGR-PROT ??????? Exec??????????? /Squid/cgi-bin/*.cgi??? /usr/local/squid/bin/*.cgiчтобы отметить для
MGR-PROT
, что скрипт выполняемый.
6.4 Настройка Apache для работы с кеш-менеджером
Сначала убедитесь, что директория cgi-bin прописана вScriptAlias
в файле srm.conf Вашего Apache, как-то так:
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 для задания пароля.
6.5 Задание ACL (списка пользователей) для кеш-менеджера в squid.conf
По умолчанию доступ к кеш-менеджеру задан в squid.conf так:??????? 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'у.
6.6 Почему он спрашивает у меня какой-то пароль и URL?
Если Вы посмотрите в выпадающем списке, то увидите, что пароль нужен только для остановки кеша, а URL нужен для обновления объекта (то есть, повторного получения его с исходного сервера). Для получения информации от cachemgr.cgi пароль не требуется.6.7 Я хочу удаленно остановить кеш. Какой пароль?
В squid.conf есть директиваcachemgr_passwd
.
6.8 Как сделать, чтобы в поле cache host по умолчанию было имя моего кеша?
Найдите в файле Makefile.in следующую строку:??????? HOST_OPT??????? = # -DCACHEMGR_HOSTNAME="getfullhostname()"Если web сервер с cachemgr.cgi запущен на той же машине, что и Squid просто уберите
#
. Если же web сервер какой-то другой, то:
??????? HOST_OPT??????? = -DCACHEMGR_HOSTNAME=\"mycache.example.com\"После этих изменений следует перекомпилировать и переустановить cachemgr.cgi.
6.9 Какая разница между TCP и UDP соединениями Squid?
Браузеры и кеши используют TCP соединения для получения объектов с web серверов или кешей. UDP соединения используются когда другой кеш использует Ваш в качестве братского или родительского на предмет наличия нужного объекта. UDP соединения это ICP запросы.6.10 Он говорит, что срок хранения кеша истечет в 1970 году!
Не волнуйтесь. Обычное (и в общем-то разумное) поведение squid это перезаписывать объекты, срок хранения которых истек.6.11 Что значат записи мета-данных?
-
StoreEntry
- Запись описывает объект кеша.
-
IPCacheEntry
- Запись в кеше DNS.
-
Hash link
- Звено в структуре хэш-таблицы.
-
URL strings
-
Сами строки URL, указывающие на номер объекта в кеше, позволяющие обращаться
к
StoreEntry
.
-
PoolMemObject structures
- Информация об объектах находящихся в памяти, (например, в процессе передачи).
-
Pool for Request structures
- Информация о каждом запросе.
-
Pool for in-memory object
- Пространство для принятых объектов.
6.12 Pool for in-memory object огромен и не становится меньше! Это что утечка памяти?
Нет. Этот пул только увеличивается. Он равен самому большому объекту когда либо кешируемому squid . Если Вы не хотите, чтобы он был такого размера, уменьшите значениеcache_mem
и размер объектов для gopher,
http и ftp в squid.conf.
6.13 Значение поля "Total accounted" не совпадает с размером занимаемым моим squid!
Если это значение близко к упомянотуму, не волнуйтесь. Если squid занимает намного больше, возможно это утечка памяти, и все что можно делать это ждать новых патчей и время от времени перезапускать squid.Если squid занимает гораздо меньше, чем в этом поле, будьте осторожны! Что-то не так, следует перезапустить squid.
6.14 В разделе utilization, что есть Other
?
Other
это категория, в каторую попадают объекты не попавшие ни
в какую другую.
6.15 В разделе utilization, почему колонка Transfer
KB/sec
всегда нулевая?
Эта колонка содержит грубое приближение отношения переданных данных к полному
времени работы кеша. Эти данные ненадежные и практически бесполезные.
6.16 В разделе utilization, что значит Object Count
?
Число объектов данного типа, находящихся в данный момент в кеше.
6.17 В разделе utilization, что значит Max/Current/Min
KB
?
Это относится к увеличиваемому/текущему/уменьшаемому размеру всех объектов
этого типа.
6.18 О чем раздел I/O
?
Это гистограммы числа байт взятых из сети вызовом read(2)
. Довольно
полезны для определения максимального размера буферов.
6.19 Что находится в разделе Objects
?
Предупреждение: в этом разделе Ваш браузер получит список
всех URL кеша и статистику о них. Он может быть очень, очень большим. Иногда
он может быть больше, чем доступная Вашему клиенту память! Вероятно
Вам эта информация никогда не понадобится.
6.20 Для чего раздел VM Objects
?
VM Objects
это объекты находящиеся в виртуальной памяти. Эти объекты
уже скачены и находятся в памяти для быстрого доступа к ним.
6.21 Что значит AVG RTT
?
Average Round Trip Time. Показывает среднее время, прошедшее от посылки
ICP ping до прихода ответа.
6.22 В разделе IP cache , какая разница между hit, negative hit и miss?
HIT значит, что документ найден в кеше. MISS, что не найден. Negative hit означает, что он находился в кеше, но не существует.6.23 Что значит содержимое раздела IP cache?
Hostname это имя, которое следует преобразовать.Для колонки Flags
:
-
C
- Кеширован.
-
N
- Не кеширован.
-
P
- Запрос отложен для посылки.
-
D
- Запрос послан и ожидается ответ.
-
L
- Запись блокирована, потому что выступает в роли родителя или брата.
TTL
представлены "Time To Live" (то есть, как долго
запись в кеше действительна). (Может быть отрицательным, если срок хранения
документа истек.)
Колонка N
это число IP адресов, которые имеет данный hostname.
В конце строки перечислены остальные IP адреса, относящиеся к этой записи в IP cache.
6.24 Как анализировать использование памяти из данных cachemgr.cgi?
Взгляните на страницуCache Information
Вашего cachemgr.cgi.
Например:
??????? 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
отключая таким образом пул свободной памяти.
6.25 Что такое fqdncache и чем отличается от ipcache?
IPCache содержит данные о преобразовании Hostname в IP-Number, а FQDNCache содержит обратные данные.Например:
============================================================================== 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: Число имен
7 Troubleshooting
7.1 Почему у меня нет доступа к прокси: "Proxy Access Denied"?
Если squid работает в режиме httpd-ускорителя, то все HTTP запросы он перенаправляет на HTTP сервер, но не работает как прокси. Если Вы хотите, чтобы Ваш кеш также отрабатывал прокси-HTTP запросы, надо сделать следующее:http_accel_with_proxy on
Также, возможно Вы неправильно задали ACL. Проверьте файлы access.log и squid.conf.
7.2 Не работает local_domain
.
Squid кеширует объекты из локального домена.
Директива local_domain
не запрещает кешировать локальные объекты.
Она предотвращает использование братских кешей для локальных объектов.
Если Вам все таки это нужно, то воспользуйтесь опциями cache_stoplist
или http_stop
(в зависимости от версии).
7.3 Когда кеш пытается получить объект с братского кеша,
получает Connection Refused,
даже когда тот кеш считает, что объект
получен успешно.
Если ICP порт верный, а HTTP порт-нет, то ICP запросы будут посылаться
нормально, а ICP ответы заставят кеш думать, что все в порядке, но сами
объекты будут пропадать. Если братский кеш измениит свой http_port
,
то у Вас будут те же проблемы некоторое время до уведомления.
7.4 Не хватает файловых дескрипторов
Это бывает, когда появляется сообщениеToo many open files
. Возможно
из-за операционной системы с низким числом файловых дескрипторов. Этот
предел обычно можно задать в ядре или при помощи других средств. Существует
два пути исчерпать лимит файловых дескрипторов: первый, это лимит на каждый
процесс, второй - на общее число дескрипторов на все процессы.
Для 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>):
- Как узнать максимальное значение файловых дескрипторов?
-
По команде
sysctl -a
значениеkern.maxfilesperproc
. - Как их увеличить?
-
sysctl -w kern.maxfiles=XXXX
- Какой верхний предел?
- Я не думаю, что есть формальное ограничение внутри ядра. Ведь структуры под данные выделяются динамически. На практике же, могут возникать непонятные явления (например, ядро будет тратить слишком много времени на поиск в таблицах).
sysctl -w kern.maxfilesperproc=XXXX
Внимание: Увеличивая значения, учитывайте соотношение
maxfiles > maxfilesperproc
.
- Как узнать максимальное значение файловых дескрипторов?
-
По команде
pstat -T
значениеfiles
, обычно отображаемое как отношениеcurrent/maximum
. - Как увеличить это значение?
-
Первый метод - увеличить значение переменной
maxusers
в конфигурации ядра и пересобрать его. Это очень быстрый и простой метод, но приводит к увеличению ряда других переменных, менять которые Вам может и не надо. - А существует более точный способ?
-
Найти файл
param.c
в исходниках ядра и изменить соотношение междуmaxusers
и максимальным числом открытых файлов по нижеприведенным выражениям.
- SunOS
-
Измените значение
nfile
в/usr/kvm/sys/conf.common/param.c
меняя значения в этом выражении: - FreeBSD (начиная с ядра 2.1.6)
-
Очень похоже на SunOS, отредактируйте
/usr/src/sys/conf/param.c
вычислив соотношение между переменнымиmaxusers
,maxfiles
иmaxfilesperproc
: - BSD/OS (начиная с ядра 2.1)
-
Поправьте
/usr/src/sys/conf/param.c
и задайтеmaxfiles
в соответствии с:
int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;
Где
NPROC
определяется как:
#define NPROC (10 + 16 * MAXUSERS)
int maxfiles = NPROC*2;
int maxfilesperproc = NPROC*2;
Где
NPROC
задан как:
#define NPROC (20 + 16 * MAXUSERS)
Ограничение числа дескрипторов на процесс также может быть задано в конфигурации ядра этой директивой:
options OPEN_MAX=128
int maxfiles = 3 * (NPROC + MAXUSERS) + 80;
Где
NPROC
задан как:
#define NPROC (20 + 16 * MAXUSERS)
Также следует задать значение
OPEN_MAX,
чтобы изменить ограничение
числа дескрипторов на процесс.??? cd squid-1.1.x ??? make realclean ??? ./configure --prefix=/usr/local/squid ??? make
7.5 Мой squid периодически вываливается с ошибкой,
что не может malloc(3)
больше памяти, но у меня достаточно ОЗУ!
Кроме ограничения на число файловых дескрипторов, многие системы имеют
ограничение на количество памяти, выделяемое процессу, в особенности не-root
процессам. BSD/OS имеет довольно низкий предел, который Вы можете увеличить.
Измените файл конфигурации ядра, добавив эти строки:
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
...
zpoprp.zpo.dec.com> limit datasize 1024M
Редактирование /etc/sysconfigtab
требует перезагрузки, а команда
limit
-
нет.
7.6 Что за странные строки об удалении объектов?
Например: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
в конфигурационном
файле.
7.7 Почему я не могу задать cache_effective_user
в nobody
под Linux?
Несколько пользователей сообщали, что они не могут задать cache_effective_user
в nobody
под Linux и сервер сообщает:
FATAL: Don't run Squid as root, set 'cache_effective_user'!Однако, если установить
cache_effective_user
не в nobody,
то все ОК. Первое решение, это создать пользователя для Squid и установить
для него cache_effective_user
.
Также можно поменять UID nobody
с 65535 на 65534.
7.8 Могу я указать Windows NT FTP серверу выводить директории в Unix формате?
Почему бы и нет! Выберите следующие пункты меню:- Start
- Programs
- Microsoft Internet Server (Common)
- Internet Service Manager
Дальше надо выбрать сервер (должен быть только один), потом выберите "Properties" из меню, закладку "directories", будет опция "Directory listing style." Выберите "Unix" type, а не "MS-DOS" type.
--Oskar Pearson <oskar@is.co.za>7.9 Почему так часто появляются сообщения ERR_NO_CLIENTS_BIG_OBJ?
Это значит, что запрашиваемый объект находился в режиме "Удалить позже" и пользователь отказался от передачи. Объект попадет в режим "Удалить позже" если он:- больше, чем maximum_object_size
- доставлен с соседнего кеша, у которого установлена опция proxy-only.
7.10 Почему Squid требует так много памяти!?
Squid потому такой быстрый и может обрабатывать одновременно несколько запросов, что использует много памяти. Для начала, просмотрите эти разделы FAQ:- 6.12 Pool for in-memory objects огромен и не становится меньше! Это что утечка памяти?
- 6.24 Как анализировать использование памяти из данных cachemgr.cgi?
-
7.5 Мой squid периодически вываливается с ошибкой,
что не может
malloc(3)
больше памяти, но у меня достаточно ОЗУ!
- GNU Malloc, доступной на ftp://ftp.gnu.ai.mit.edu/pub/gnu/malloc.tar.gz. Проверка на 'libgnumalloc.a' включена в конфигурационный скрипт Squid'а. Если libgnumalloc.a найдена, то автоматически подлинковывается.
7.11 Почему я получаю "Ignoring MISS from non-peer x.x.x.x"?
Вы получаете ICP MISS (через UDP) с родительского или братского кеша, чей IP адрес Вашему кешу не известен. Это может быть в двух случаях.(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 эти сообщения. Чтобы исправить надо, либо сказать этому кешу перестать слушать адреса, или, если он законный, добавьте его в файл конфигурации.?
8 Как Squid работает?
8.1 Какие объекты кешируются?
Объекты Internet такие как файл, документ, или ответ на запрос следующих сервисов: FTP, HTTP, или gopher. Клиент запрашивает объект Internet с кеширующего прокси, прокси сервер получает объект (либо с хоста, указанного в URL, либо с родительского или братского кеша), переправляя его клиенту.8.2 Что за протокол ICP?
ICP это протокол используемый для общения кешей squid. ICP протокол описан в Internet Cache Protocol, 2 проекте документа, находящемся по адресу http://www.nlanr.net/Cache/ICP/ICP-id.txt.ICP прежде всего используется в иерархии кешей для поиска определенных объектов в братских кешах. Если squid не находит нужного документа, то посылает ICP запрос братским кешам, которые в свою очередь отвечают ICP ответами "HIT" ("попадание") или "MISS" ("промах"). Затем кеш использует ответы для выбора при помощи какого кеша разрешать свои ответы MISS.
ICP также поддерживает сложные передачи множества объектов через одно TCP соединение. ICP сейчас работает поверх UDP. Текущие версии Squid также поддерживают множественные запросы ICP.
8.3 Что такое dnsserver?
Dnsserver это процесс инициируемый squid для преобразования доменных имен в IP адреса. Необходимость возникает из-за того, что функцияgethostbyname(3)
блокирует вызывающий процесс до зазрешения DNS
запроса.
У Squid не должен блокироваться процесс ввода/вывода, поэтому DNS обращения выполнены как внешний к основному процесс. Процессы dnsserver не кешируют запросы DNS, это делается самим squid`ом.
8.4 Для чего нужна программftpget?
Программа ftpget это FTP клиент, использующийся для скачивания файлов с FTP серверов. Из-за того, что FTP протокол непростой, проще выполнить его отдельно от основного кода squid.8.5 FTP PUT не работает
Похоже,что FTP put не работает через squid. Можно ли как-нибудь это исправить и/или ведется ли какая-нибудь работа в этом направлении.На данный момент нет, для поддержки этого нужна будет программа ftpput.
8.6 Что такое иерархия кешей? Что такое родительские и братские кеши?
Иерархия кешей это структура кеширующих прокси-серверов расположенных логически как родительский/дочерний и братский узлы, таким образом, что кеши ближайшие к каналу в Internet являются родителями тем, которые находятся дальше от точки входа в Internet. Родительские кеши обрабатывают "промахи" дочерних. Иначе говоря, когда кеш запрашивает объект с родителя, и у того в кеше его не оказывается, родительский кеш скачивает объект, кеширует его, и передает дочернему. Таким образом, при помощи иерархии достигается максимальная разгрузка канала, снижается использование внешних серверов Internet и получается большее число "попаданий" дочерних кешей, по сравнению с родительскими, за счет большего кеша последних.Кроме родительских/дочерних отношений, squid поддерживает понятие братских кешей, то есть находящихся на одном уровне иерархии, призванных распределить нагрузку. Каждый кеш в иерархии независимо ни от кого решает откуда брать объект, либо с сервера в Internet, либо с родительского или братского кеша, используя простой механизм разрешения. Братские кеши не будут забирать объект для другого кеша того же уровня, получив от них "промах".
8.7 Каков алгоритм разрешения кеша Squid?
- Разослать ICP запросы всем соответствующим братским кешам
- Дождаться всех ответов, пришедших в течение заданного времени (по умолчанию две секунды).
- Получив первый ответ HIT начать скачивание объекта , или
- Взять объект с первого родительского кеша, ответившего MISS (зависит от весовых коэффициентов), или
- Забрать объект из Internet
Директива single_parent_bypass
предотвращает рассылку ICP запросов,
в случае когда соответствующий братский кеш это родительский (то есть,
если больше неоткуда брать объект, зачем напрасно запрашивать?)
8.8 Над какими возможностями Squid разработчики сейчас работают?
Есть несколько открытых проектов касающихся лучшего автоматического выравнивания нагрузки, также (динамического и статического) выбора родительских кешей, роутинга, множественных кеш-кеш обращений и лучшего распознавания URL, которые не надо кешировать.Текущий список будущих возможностей, доступен здесь http://squid.nlanr.net/Squid/Devel/todo.html.
Разработчикам будущих версий следует обратиться сюда http://squid.nlanr.net/Squid/Devel/.
8.9 Где найти информацию о загрузке Internet трафика
Загрузку можно охарактеризовать как тяжесть возлагаемая пользователем или группой пользователей на систему. Понимание природы загрузки очень важно при управлении производительностью системы. Если Вы интересуетесь загрузкой Internet трафика, то для начала сходите сюда http://www.nlanr.net/NA/.8.10 Какие преимущества кеширования совместно с кеширующей системой NLANR?
Преимущества иерархического кеширования заключаются в снижении загрузки канала, уменьшении времени доступа, лучшей устойчивости к сбоям. Кеши верхнего уровня обслуживают запросы нижестоящих..Если средний процент попадания краевого кеша 50%, половина всех ссылок краевых кешей должна обрабатываться через кеш второго уровня, нежели напрямую с исходного хоста. Если этот кеш второго уровня содержит большинство запрашиваемых документов, то выигрыш достигается, но если кеш верхнего уровня чаще всего не имеет нужный документ, или перегружен, то время доступа вместо снижения увеличивается.8.11 Где найти информацию по брандмауэрам?
Смотрите список рассылки и FAQ здесь http://www.greatcircle.com/firewalls/?$Id: footer,v 1.3 1997/03/13 16:19:52 wessels Exp $