Трафик-компрессор для пользователей Dial-Up

()

В статье описывается трафик-компрессор, предлагаемый как дополнительная услуга пользователям Dial-Up-интернета в небольшом операторе связи.

В основе компрессора лежит прокси-сервер ziproxy, который умеет сжимать проходящий через него трафик и рефакторить HTML-код, однако чтобы немного его разгрузить и добавить нормальную возможность разграничения доступа добавлен второй каскад - прокси сервер squid, который кэширует пользовательские запросы и снижает нагрузку на ziproxy.

В статье будет подразумеваться что используется дистрибутив Gentoo. В случае другого дистрибутива команды и пути могут отличаться.

Итак шаг первый - установка ПО:

emerge squid ziproxy

Теперь приступим к настройке. Тут тоже ничего сложного. Для начала настроим ziproxy так, чтобы он слушал только localhost и принимал запросы только с него же. Для этого в ziproxy.conf нужно написать:

Port = 65534
Address = "127.0.0.1"
OnlyFrom = "127.0.0.1"

Следующим шагом настраиваем сжатие. Отключаем сжатие картинок (включать стоит только при очень маленьком количестве клиентов или очень мощном сервере) и включим сжатие текста:

ProcessJPG = false
ProcessPNG = false
ProcessGIF = false
ProcessHTML = true
ProcessCSS = true
ProcessJS = true

После этого переходим к параметрам сжатия (а главное - рефакторинга(!)) HTML:

ProcessHTML_CSS = true
ProcessHTML_JS = true
ProcessHTML_tags = false
ProcessHTML_text = false
ProcessHTML_PRE = true
ProcessHTML_NoComments = true

Эти опции подбирались экспериментально, чтобы не ломать код, но при этом максимально уменьшать его размер.

Всё. Конфигурирование ziproxy закончено. Запускаем его:

/etc/init.d/ziproxy start
rc-update add ziproxy default

Переходим к настройке squid. Тут всё ещё проще - нужно только создать acces_list с разрешениями для "своих" сетей, и настроить форвардинг на ziproxy.

Для решения первой задчи добавляем в squid.conf следующие строки:

acl our_networks src "/etc/squid/our_networks"
http_access allow our_networks

И перечисляем сети в файле /etc/squid/our_networks.

Для решения второй задачи дописываем в squid.conf строки:

cache_peer 127.0.0.1 parent 65534 0 no-query no-digest
never_direct allow all
always_direct deny all

Так же мы можем увеличить время хранения в кэше определённых типов файлов:

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

По умолчанию squid слушает на порту 3128, если хотите переместить его на другой порт - используйте директиву http_port в файле конфигурации.

Запускаем squid:

/etc/init.d/squid start
rc-update add squid default

Всё. Теперь можно указать в настройках браузера адрес squid и наслаждаться некоторым приростом скорости. После нескольких месяцев использования было замечено что при включеной графике в браузере скорость возрастает процентов на десять, а при выключенной - в два-три раза.

Так же по желанию пользователей можно добавить сюда же ещё и "банерорезку" для запрета загрузки рекламы.

Для сбора стастистика можно использовать sarg и ziproxylogtool (последняя входит в комплект ziproxy).

Настройка sarg описана много раз, и тратить на это время мы не будем. Лучше сразу перейдём к ziproxylogtool. Эта утилита обладает достаточно небольшим функционалом, однако кое-что можно сделать и с её помощью. Например смотреть статистку по дням. Для этого нужен очень простой скрипт:

#!/bin/sh
/bin/echo "<PRE>`/bin/date +%d/%m/%Y --date "-1 day"`" >> /var/www/more/stat/ziproxy/index.html
/bin/echo "`/usr/bin/ziproxylogtool -m g -i /var/log/ziproxy/access.log`</PRE><BR><BR>" >> /var/www/more/stat/ziproxy/index.html
/bin/echo > /var/log/ziproxy/access.log

Этот скрипт должен запускаться каждый день в полночь.

Ссылки:

Ключевые слова: ziproxy, squid, трафик-компрессор.

Комментарии:

sungreen 2007-06-09 21:33:50 (#)

... кто нибудь использует такое? ...

MooSE 2007-06-10 16:09:36 (#)

Клиенты той конторы (см. ссылку в начале статьи) используют. Судя по логам - они вполне должны быть довольны.

У меня самого такая штука стоит на отдельном сервере. Реально экономлю:)

Anonymous 2010-01-18 01:48:31 (#)

на 2010-й год всё еще полезно при использовании GPRS/EDGE инетрнета.

MooSE 2010-01-18 01:59:34 (#)

Полностью поддерживаю предыдущего оратора:)

Anonymous 2010-02-18 09:07:20 (#)

здравствуйте.
Подскажите пожалуйста. если использовать ziproxy в связке с squid (юзеры берут инет у squid а squid у ziproxy) когда ziproxy отдаёт squid данные сжатые gzip - squid пользователю передает сжатые или расжимает и передаёт нераспакованны

MooSE 2010-02-18 09:12:01 (#)

передаёт сжатые. проверено.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE