Я пытаюсь настроить 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.logrefresh_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 не знает.