стоверьтесь, что на рабочих станциях прописаны локальные 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 Size
access.log, Squid 1.0 родной формат:
ššš Time Elapsed Host Status/HTTP/Hier_Status Size Method URL
access.log, Squid 1.1 родной формат:
ššš Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host
hierarchy.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.
В основном похоже на log файл в директории cache:
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.
Какой верхний предел?
Я не думаю, что есть формальное ограничение внутри ядра. Ведь структуры под данные выделяются динамически. На практике же, могут возникать непонятные явления (например, ядро будет тратить слишком много времени на поиск в таблицах).
Для большинства BSD-систем (SunOS, 4.4BSD, OpenBSD, FreeBSD, NetBSD, BSD/OS, 386BSD, Ultrix) можно решить задачу "в лоб" (требуется пересборка ядра):
Как узнать максимальное значение файловых дескрипторов?
По команде pstat -T значение files, обычно отображаемое как отношение current/maximum.
Как увеличить это значение?
Первый метод - увеличить значение переменной maxusers в конфигурации ядра и пересобрать его. Это очень быстрый и простой метод, но приводит к увеличению ряда других переменных, менять которые Вам может и не надо.
А существует более точный способ?
Найти файл param.c в исходниках ядра и изменить соотношение между maxusers и максимальным числом открытых файлов по нижеприведенным выражениям.
Вот несколько примеров:
SunOS
Измените значение nfile в /usr/kvm/sys/conf.common/param.c меняя значения в этом выражении:

int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;
Где NPROC определяется как:
#define NPROC (10 + 16 * MAXUSERS)
FreeBSD (начиная с ядра 2.1.6)
Очень похоже на SunOS, отредактируйте /usr/src/sys/conf/param.c вычислив соотношение между переменными maxusers, maxfiles и maxfilesperproc:

int maxfiles = NPROC*2;
int maxfilesperproc = NPROC*2;
Где NPROC задан как:
#define NPROC (20 + 16 * MAXUSERS)
Ограничение числа дескрипторов на процесс также может быть задано в конфигурации ядра этой директивой:
options OPEN_MAX=128
BSD/OS (начиная с ядра 2.1)
Поправьте /usr/src/sys/conf/param.c и задайте maxfiles в соответствии с:

int maxfiles = 3 * (NPROC + MAXUSERS) + 80;
Где NPROC задан как:
#define NPROC (20 + 16 * MAXUSERS)
Также следует задать значение OPEN_MAX, чтобы изменить ограничение числа дескрипторов на процесс.
Замечание: После пересборки ядра необходимо откомпилировать заново Squid. Конфигурационный скрипт Squid'а определяет сколько файловых дескрипторов доступно, так что надо запустить скрипт заново. Например:
ššš 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 формате?

Почему бы и нет! Выберите следующие пункты меню: Дважды щелкните на ftp.

Дальше надо выбрать сервер (должен быть только один), потом выберите "Properties" из меню, закладку "directories", будет опция "Directory listing style." Выберите "Unix" type, а не "MS-DOS" type.

--Oskar Pearson <oskar@is.co.za>

7.9 Почему так часто появляются сообщения ERR_NO_CLIENTS_BIG_OBJ?

Это значит, что запрашиваемый объект находился в режиме "Удалить позже" и пользователь отказался от передачи. Объект попадет в режим "Удалить позже" если он:
  1. больше, чем maximum_object_size
  2. доставлен с соседнего кеша, у которого установлена опция proxy-only.

7.10 Почему Squid требует так много памяти!?

Squid потому такой быстрый и может обрабатывать одновременно несколько запросов, что использует много памяти. Для начала, просмотрите эти разделы FAQ: Также можно повысить производительность линкуя Squid с внешней malloc библиотекой. Мы рекомендуем:

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?

  1. Разослать ICP запросы всем соответствующим братским кешам
  2. Дождаться всех ответов, пришедших в течение заданного времени (по умолчанию две секунды).
  3. Получив первый ответ HIT начать скачивание объекта , или
  4. Взять объект с первого родительского кеша, ответившего MISS (зависит от весовых коэффициентов), или
  5. Забрать объект из 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 $