Главная > Програмное обеспечение > для Internet >
SQUID Часто задаваемые вопросы [8/9]

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 формате?

Почему бы и нет! Выберите следующие пункты меню:
  • Start
  • Programs
  • Microsoft Internet Server (Common)
  • Internet Service Manager
Дважды щелкните на 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 библиотекой. Мы рекомендуем:
  • 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 эти сообщения. Чтобы исправить надо, либо сказать этому кешу перестать слушать адреса, или, если он законный, добавьте его в файл конфигурации. 


Страница 1 2 3 4 5 6 7 8 9 <<< Предыдущая Следущая >>>


Украинская Баннерная Сеть

Главная  Алфавитный индекс  Справка  Добавить FAQ  E-mail
Новости  Поиск по сайту

Copyright © 2001 - 2003 Olexandr Slobodyan.
Сайт создан в системе uCoz