Развивая тему экономии трафика с помощью
прокси-сервера squid нельзя не упомянуть про возможности дополнительной
настройки кэша, а так же возможность задания правил кэширования для
разных адресов (которые можно задавать шаблонами).
Все описанные здесь изменения делаются в файле squid.conf, который в большинстве дистрибутивов расположен в /etc/squid/
Сначала вспомним про очень полезную опцию:
reload_into_ims. По умолчанию она выключена. Если ещё включить, то
вместо reload squid будет посылать запрос If-Modified-Since. Это
нарушение стандарта HTTP, однако большинство серверов корректно
обрабатывают этот запрос, потому включаем:
reload_into_ims on
Далее находим параметр refresh_pattern. Он задаёт параметры кэширования. Стандартно шаблоны выглядят так:
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320
Обычно используется эта инструкция так:
refresh_pattern regex min percent max options
Опции означают следующее:
| regex |
Регулярное выражение. Описывает адреса, к которым применимо это правило. |
| min |
Минимальное время, в течении
которого объект в кэше считается новым. Рекомендуется использовать 0,
чтобы корректно отображались динамические страницы. |
| percent |
Процент от возраста объекта с явным указание срока актуальности, в течении которого объект считается новым. |
| max |
Указывает верхний предел времени, в течении которого объекты без явного указания времени актуальности считаются новыми. |
| options |
Дополнительные опции, перечисляемые через пробел. Самые интересные из них:
- override-expire: заставляет игнорировать факт истечения времени актуальности объекта.
- override-lastmod: заставляет игнорировать переданное сервером время последней модификации объекта.
- ignore-reload: заставляет игнорировать запрос reload от клиента и выдавать версию объекта из кэша.
- ignore-no-cache: заставляет игнорировать заголовок no-cache с сервера и принудительно кэшировать объект.
|
Правила обрабатываются сверху вниз до первого сработавшего правила. Потому правило для "." должно идти последним.
Пишем правила. Для начала закомментируем имеющиеся правила. Вместо них мы будем писать свои:
#refresh_pattern ^ftp: 1440 20% 10080 #refresh_pattern ^gopher: 1440 0% 1440 #refresh_pattern . 0 20% 4320
Далее настроим более жёсткое кэширование для определённых типов файлов:
refresh_pattern \.bz2$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.exe$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.gif$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.gz$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.ico$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.jpg$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.mid$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.mp3$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.pdf$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.swf$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.tar$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.tgz$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.zip$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache #refresh_pattern . 0 20% 4320
Уже это даёт солидную экономию. Далее на очереди реклама. Конечно её можно вырезать с помощью bfilter и/или adzapper, но ни один фильтр не может убрать всей рекламы, потому на всякий случай добавим правила для кэширования рекламы:
refresh_pattern http://ad\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://ads\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://adv\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://click\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://count\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://counter\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://engine\. 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://img\.readme\.ru 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern http://userpic\.livejournal\.com 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.ru/bf-analyze 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern \.ru/bf-si 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern /advs/ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern /banners/ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache refresh_pattern /cgi-bin/iframe/ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
Далее полезно ещё раз изучить логи squid. Возможно вы напишите какие-то свои дополнительные правила.
Наконец можно написать правила для адресов, не
подпадающих под остальные шаблоны. Используем дефолтные правила с
небольшой модификацией:
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 80% 14400
При наличии достаточного количества места на сервере
так же имеет смысл увеличить размер кэша и максимальный размер объекта,
попадающего в кэш.
За размер кэша отвечает параметр cache_dir:
# cache_dir ufs /var/spool/squid 100 16 256 cache_dir ufs /var/spool/squid 10240 16 256
За максимальный размер объекта в кэше отвечает параметр maximum_object_size:
# maximum_object_size 4096 KB maximum_object_size 10240 KB
Закончив изменения сохраняем файл и даём команду squid перечитать настройки:
squid -k reconfigure
На этом всё. Если вы используете sarg для анализа
логов squid то вы наверняка заметите рост эффективности кэша. (У автора
использование кэша увеличилось с 6% до 28%)
Источник: http://ylsoftware.com/?action=news&na=viewfull&news=403 |