Установка и настройка 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