Установка и настройка Ziproxy в связке co Squid. Жмем трафик
Порой бывает необходимо пожать трафик для ускорения работы интернет-соединения или для уменьшения самого количества трафика. У меня такая необходимость возникла в тот момент, когда я использовал 3G-модем от одного из операторов сотовой сети моего города. Трафик хоть и безлимитный, но при достижении какого-то порога (в моем случае - 2Гб в месяц) скорость падала до жалких 64Кбит/с. Дома на тот момент стоял кэширующий Squid, поэтому решил сделать себе "сжиматель" =) Подробности под катом.
Итак, начнем с Ziproxy. Что же это за зверь такой?
Ziproxy — перенаправляющий, некэширующий HTTP-прокси, предназначенный для оптимизации трафика. Суть работы программы заключается в пересжатии изображений (таких как JPEG, GIF, PNG, JPEG 2000), сжатие текста с помощью gzip и оптимизация HTML/JS/CSS.
Дополнительные возможности:
- работа в режиме прозрачного прокси-сервера;
- «опережающее» разрешение DNS-имён серверов, на которые есть ссылки в HTML-файлах.
(с) Wikipedia (link)
Вот, он-то нам и нужен в нашем деле.
Описывать установку и настройку Squid я не буду - найдете в интернетах или же опишу позже. Перейдем сразу к установке и настройке Ziproxy.
Установка
Т.к. я уже много времени использую Gentoo в качестве шлюза, то описывать буду действия конкретно для Gentoo.
Устаавливаем ziproxy:
Ziproxy в репозитории Gentoo замаскирован по маске ~x86. Для установки добавим в файл /etc/portage/package.accept_keywords строку
>=net-proxy/ziproxy-3.1.3 ~x86
Далее качаем и устанавливаем ziproxy командой emerge
sudo emerge -av ziproxy
Настройка самого Ziproxy
В настройке нет ничего сложного.После установки появился конфигурационный файл /etc/ziproxy/ziproxy.conf
Наш ziproxy будет работать в связке co squid, поэтому нам не надо, чтобы он смотрел во внешний мир. Впишем в конфиг:
Port = 8787
Address = "127.0.0.1"
OnlyFrom = "127.0.0.1"
Настроим логгирование (у меня отдельный раздел /data, если отсутствует - заменить на /var)
DebugLog = "/data/logs/ziproxy/debug.log"
ErrorLog = "/data/logs/ziproxy/error.log"
AccessLog = "/data/logs/ziproxy/access.log"
Включим замену заголовков для отдачи данных в сжатом виде
OverrideAcceptEncoding = true
Таймаут запроса в секундах и не использовать размеры данных:
ConnTimeout = 25
UseContentLength = false
Сжимать выходные данные с помощью gzip:
Gzip = true
Что ж, теперь настроим само сжатие
Отключаем сжатие картинок (включать стоит только при очень маленьком количестве клиентов или очень мощном сервере) и включим сжатие текста:
ProcessJPG = false
ProcessPNG =false
ProcessGIF = false
Если же сервер мощный или клиентов мало, то пишем так:
ProcessJPG = true
ProcessPNG = true
ProcessGIF = true
ImageQuality = {50,50,50,50}
Значения в ImageQuality подбираются экспериментальным путем, мне подошли эти настройки.
Включим оптимизирование текстовых данных и html-кода
ProcessHTML = true
ProcessCSS = true
ProcessHTML_CSS = true
ProcessHTML_JS = false # в некоторых случаях портит код. отключаем.
ProcessHTML_tags = false
ProcessHTML_text = true
ProcessHTML_PRE = true
ProcessHTML_NoComments = true
ProcessHTML_TEXTAREA = true
Опишем типы данных, которые разрешено обрабатывать:
LosslessCompressCT = {
"text/*", "application/asp", "application/awk", "application/cgi", "application/class",
"application/css", "application/dvi", "application/executable", "application/font",
"application/futuresplash", "application/iso9660-image", "application/java", "application/javascript",
"application/json", "application/msexcel", "application/mspowerpoint", "application/msword",
"application/pdf", "application/perl", "application/php", "application/postscript", "application/python",
"application/rtf", "application/shellscript", "application/shockwave", "application/staroffice",
"application/tar", "application/truetype-font", "application/vnd.*", "application/*+xml", "application/xml",
"application/xml-dtd", "image/svg+xml"
}
Если не использовать gzip-сжатие, то вместо LosslessCompressCT пишется:
Compressible = { "shockwave", "msword", "msexcel", "mspowerpoint", "rtf", "postscript", "java", "javascript", "staroffice", "vnd.", "futuresplash", "asp", "class", "font", "truetype-font", "php", "cgi", "executable", "shellscript", "perl", "python", "awk", "dvi", "css", "xhtml+xml", "rss+xml", "xml", "pdf", "tar" }
На этом настройка конфига заканчивается. Добавим ziproxy в автозапуск:
sudo rc-update add ziproxy default
Настройка Squid для работы с Ziproxy
Переходим к настройкам Squid. Для начала создадим в папке /etc/squid/rules файл our_networks.acl со списком ip или подсетей, для которых мы будем жать трафик.
Т.к. я использую сжатие не для основных клиентов, а для 3G сетей, то у меня в этом правиле прописаны подсети для которых не надо ничего сжимать. В итоге будет 2 варианта настройки.
/etc/squid/rules/our_networks.acl:
192.168.0.0/16
Здесь указываем подсеть 192.168.0.0/255.255.0.0. У меня несколько подсетей класса С, поэтому такое значение =)
Теперь впишем строки в конфиг squid (/etc/squid/squid.conf):
acl our_networks src "/etc/squid/rules/our_networks.acl"
Добавляем обработку правила. В случае с "жать всем, кроме":
http_access allow our_networks
cache_peer 127.0.0.1 parent 8787 0 no-query no-digest
never_direct allow all
always_direct allow our_networks
always_direct deny all
В случае с "жать всем, кто в правиле":
http_access allow our_networks
cache_peer 127.0.0.1 parent 8787 0 no-query no-digest
never_direct allow all
always_direct deny our_networks
Можно так же увеличить время хранения определенных типов файлов в кэше:
refresh_pattern \.bz2$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.css$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.exe$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.gif$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.gz$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.ico$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.jpg$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.js$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.mid$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.mp3$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.pdf$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.swf$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.tar$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.tgz$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
refresh_pattern \.zip$ 43200 100% 43200 override-lastmod override-expire ignore-no-cache
Запуск
С настройкой все. Теперь запускаем сервисы:
sudo /etc/init.d/squid start
sudo /etc/init.d/ziproxy start
Вписываем адрес вашего прокси в браузер на нужном клиенте и радуемся жизни.
(c) bobspct.ru 11.01.2012 by Bobspct
Комментариев 0