Назад | Перейти на главную страницу

Squid не кешируется

Я пытаюсь настроить Squid как кеширующий сервер. У меня есть локальная сеть, в которой находится веб-сервер (apache) 192.168.122.11 кальмар в 192.168.122.21 и мой клиент находится в 192.168.122.22. Проблема в том, что когда я смотрю журнал доступа Squid, я вижу только TCP_MISS Сообщения. Похоже, Squid вообще не кеширует. Я проверил, есть ли у каталога кеша все необходимые разрешения. Что еще здесь может пойти не так? Вот мой конфиг кальмара:

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.1/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
http_access allow all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128 accel defaultsite=cona-proxy vhost
cache_peer 192.168.122.11 parent 80 0 no-query originserver login=PAS name=webserver
cache_dir ufs /var/spool/squid3 100 16 256
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:   1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?)   0   0%  0
refresh_pattern (Release|Packages(.gz)*)$   0   20% 2880
refresh_pattern .   0   20% 4320
always_direct allow all
acl server_users dstdomain cona-proxy
http_access allow server_users
cache_peer_access webserver allow server_users
cache_peer_access webserver deny all

Во всех машинах, cona-proxy указывает на 192.168.122.21 (добавил, что в /etc/hosts)

Выход curl -v 192.168.122.11

* About to connect() to 192.168.122.11 (#0)
* Trying 192.168.122.11... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libculr/7.22.0 OpneSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: 192.168.122.11
> Accept: */*
>
< HTTP/1.1 202 OK
< Date Mon, 02 Jul 2012 05:48:50 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Last-Modified: Tue, 19 Jun 2012 23:04:25 GMT
< ETag: "27389-b1-4c2db4dc2c182"
< Accept_Ranges: bytes
< Content-Length: 177
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
<
<html><body><h1>It works!</h1>
<p>This is the default web page for the server.</p>
<p>The web server software is running but no content has been added, yet. </p>
</body></html>
* Connection #0 to host 192.168.122.11 left intact
* Closing connection #0

По моему опыту, 3 наиболее распространенные причины, по которым Squid отказывается кэшировать контент:

  • Разрешения кэширования каталога, и вы позаботились об этом. Хорошо :)
  • http_access, но это не ваш случай, потому что вы видите TCP_MISS строки в вашем access.log
  • refresh_pattern директивы

refresh_pattern Директивы управляют тем, как Squid считает объекты свежими или устаревшими, особенно в отношении того, как ваш браузер выполняет запросы и какие HTTP-заголовки управления кешем обмениваются.

В refresh_pattern Строки, которые у вас есть в вашей конфигурации, являются строками Squid по умолчанию. Однако я только что установил Squid на Ubuntu 2 недели назад, и с этими настройками по умолчанию он почти ничего не кеширует.

Документация Squid о refresh_pattern должен объяснять значение каждой строки, но на самом деле я не могу понять, что означает эта документация. И видимо я не одинок :)

Я бы посоветовал вам добавить один или несколько из следующих шаблонов и протестировать определенные файлы / URL-адреса, пока вы не будете удовлетворены. Пример:

refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200

С помощью этого вы говорите Squid, что все значки / изображения должны быть кэшированы от 1 часа до максимум полдня. Ваш браузер может отправлять HTTP-запросы с определенными заголовками кеша, которые заставляют Squid отвечать с TCP_MISS тем не мение. Чтобы сила кешированные ответы, даже нарушив ожидания клиента, вы можете сделать это:

refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private

То же самое касается больших файлов фильмов / аудио / iso:

refresh_pattern -i \.(mp[34g]|swf|wav|...)$ 43200 90% 432000

Если что-то еще не помогает, используйте мощный молоток :) но я делаю не рекомендую это:

refresh_pattern . 3600    80%     14400

с помощью которого вы говорите Squid, что он может кэшировать все по крайней мере на 1 час. Однако это почти наверняка сломает динамические приложения. Используйте его, если сервер, который вы пытаетесь кэшировать, в основном состоит из статического содержимого.

Также не забывайте maximum_object_size. По умолчанию это 20Мб. Если объекты, которые вы пытаетесь кэшировать, больше этого размера, Squid не будет их кэшировать. Я увеличил его в 10 раз, до 200 МБ. YMMV.

maximum_object_size 204800 KB

Кстати, ваш cache_peer строка неверна, поскольку указывает на Apache. А cache_peer Говоря языком Squid, это еще один экземпляр Squid, находящийся выше в иерархии кешей, который раньше обычно был сервером кеширования ISP. Просто удали эту строку.

И удачи :)

В вашей конфигурации вы пропустили эти строки:

acl myhosts src 192.168.0.0/255.255.0.0 (your internal network/netmask)
http_access allow myhosts

РЕДАКТИРОВАТЬ1:

Ваш веб-сервер не является вашим cache_peer. Пожалуйста, удалите эту строку из вашего конфигурационного файла. Squid имеет для взаимодействия между кешами другой тип протокола (ICP), о котором apache не знает.