трафик-компрессор для пользователей 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
Этот скрипт должен запускаться каждый день в полночь.
MooSE
В основе компрессора лежит прокси-сервер 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
Этот скрипт должен запускаться каждый день в полночь.
MooSE
Сетевые решения. Статья была опубликована в номере 07 за 2007 год в рубрике sysadmin