Часто ли Вам приходится пользоваться Интернетом с Вашего ноутбука в связке с gprs-модемом? Далеко не все являются счастливыми обладателями неограниченного доступа в Интернет с мобильных устройств. Я сталкиваюсь с таким вопросом по несколько раз в день, например, когда появляется необходимость получить доступ к нормативным документам, расположенным на сайте того или иного ведомства, выполненным в виде документов в форматах «pdf» или «doc». Конечно, можно создать локальный архив вручную, но это не выход, т.к. тогда придется отслеживать все изменения и дополнения, да и структурировать несколько десятков тысяч документов — задача непростая. Но как в таком случае можно ускорить доступ к необходимой информации и понизить затраты на трафик?

Примечание: В статье приведен пример решения задачи принудительного кэшировании при помощи сервера Squid3, установленного в Ubuntu 8.10

Мной были опробованы три подхода решения данной задачи.

Сжатие трафика


Воспользовавшись такими инструментами сжатия трафика, как «TrafficCompressor», мы не добьемся необходимого результата, а именно кэширования необходимых нам документов. К тому же, сейчас все больше и больше сайтов поддерживают gzip-сжатие, исключая тем самым необходимость сжатия текста страниц этим методом.

Кэширование стандартными средствами браузера


В этом случае браузер будет кэшировать только лишь то, что разрешено сервером, но не необходимые нам документы.

Принудительное кэширование при помощи


Сразу отмечу, что именно такой подход и решил поставленную задачу. При принудительном кэшировании запрашиваемый файл ищется к кэше, а в случае, если его там нет, загружается из Интернета. Таким образом нам не придется создавать локальное хранилище документации. Доступ ко всем документам мы будем получать привычным образом (нажав на ссылку, находясь на сайте, где расположен искомый документ), а также мы не пропустим появлении нового документа. Загрузка документа из кэша происходит намного быстрее, чем из Интернета.

А теперь о том, как реализовать принудительное кэширование, на примере Ubuntu 8.10 и squid3.

Squid — программный пакет, реализующий функцию кеширующего прокси-сервера для протоколов HTTP, FTP, Gopher и HTTPS.


1. Устанавливаем squid3 (все дальнейшие действия производятся в командной строке):
sudo apt-get install squid3 squid3-common -y


2. Открываем файл конфигурации установленного сервера:
sudo gedit /etc/squid3/squid.conf


3. Комментируем описание «старого» правила кэширования:
#refresh_pattern ^ftp: 1440 20% 10080
#refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern . 0 20% 4320


4. После закомментированного дописываем новые правила, которые позволяют кешировать принудительно все на год:
refresh_pattern \.doc$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.xls$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.ppt$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.docx$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.xlsx$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.pptx$ 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 \.bz2$ 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 \.gz$ 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 \.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 \.png$ 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 \.jpeg$ 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 \.wav$ 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 \.prz$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.inf$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.css$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.js$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 80% 14400


5. Следующим нашим шагом является увеличение размера кэша:
# cache_dir ufs /var/spool/squid3 100 16 256
cache_dir ufs /var/spool/squid3 10240 16 256


6. Затем увеличиваем максимальный размер объекта кэша:
# maximum_object_size 4096 KB
maximum_object_size 10240 KB


7. Заставляем сервер перечитать измененный конфиг для того, чтобы настройки вступили в силу:
sudo squid3 -k reconfigure


8. Прописываем настройки нашего сервера либо в системе, либо в браузере:
localhost:3128


Система принудительного кэширования готова к работе.

В следующий раз будут затронуты аспекты выборочного ограничение скорости, которое так необходимо при отладке «долгих» ajax-запросов на локальной машине.
_________
Текст подготовлен в ХабраРедакторе