Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  hosting
  mod_gzip
  mod_log_sql
  mod_geoip
  mod_bandwidth
  mod_accounting
  mod_bunzip2
  mod_mp3
  mod_shapvh
  mod_limitipconn
  mod_sqlinclude
  mod_auth_imap
  webalizer
  Apache + SSL
  auth_ldap
  Настройка AWStats
  apache 2.0
  mod_auth_external
  CMS - TYPO3
  phpBB-2/3
  mod_ntlm
  mod_ntlm2
  Nginx+php+fcgi
  OTRS на Apache1
  OTRS на Apache20
  ApacheStats
  mod_evasive
  Lighttpd
  nginx+php-fpm+mysql
  php + mssql
  MySQL + кодировки
  svn+apache+trac
  php5-oci8
  Lighttpd + Apache
  CMS Drupal 6.9
  Apache22+MySQL
  Оптимизация хоста для CMS
  блокировка spam на www
  PostgreSQL 8
  Apache 22 + PHP5 + suPHP
  lighttpd + mod_uploadprogress
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco
www.lissyara.su —> статьи —> FreeBSD —> WWW —> mod_gzip

mod_gzip - сжатие html страниц `на лету`

Автор: lissyara.


    Столкнулся с тем, что отчёты, которые делал sarg, на одной из удалённых машин очень уж большого размера - html-файлы были по мегабайту, по два... Линия там не очень толстая, да и до кучи время отклика очень большое 130 миллисекунд (что, к делу отношения не имеет - самое главное, что не толстая :))... Смотреть статистику было тяжело - файлы грузились подолгу (правда, раз загрузившись, кэшировались, и потому второй заход был шустрым). Подумавши, вспомнил, что давно, когда-то, `альфа-версия` этого сайта, ещё в html, висела на линии в 64k - и я откуда-то скачивал и компилил модуль для сжатия страниц `на лету`, для apache1.3.x. Порывшись, выяснил - что существует по крайней мере два решения - mod_deflate - отечественное решение для apache1.3 - причём в apache2 уже свой модуль deflate, и mod_gzip. У обоих есть недостатки  - у mod_deflate - то, что надо перекомпилить апачу, а у mod_gzip - он не сразу жмёт то, что выводится пользователю, а вначале сохраняет всё это во временных файл, а потом уже жмёт его и отдаёт посетителю... Кругом засада. Апач перебирать - лениво, да и нагрузка не какая-то безумная - я ж не хостер, поэтому решил снова поковыряться с mod_gzip. Кстати, он уже есть в портах, оттуда и ставим:

/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='mod_gzip'
Port:   mod_gzip-1.3.26.1a
Path:   /usr/ports/www/mod_gzip
Info:   An Internet Content Acceleration module for Apache
Maint:  ale@FreeBSD.org
B-deps: apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
R-deps: apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
WWW:    http://sourceforge.net/projects/mod-gzip/

/usr/ports/>cd /usr/ports/www/mod_gzip
/usr/ports/www/mod_gzip/>make && make install && make clean

Если апач не стоит - он его за собой потащит, причём 1.3.x - ибо он именно под него, под apache2 он не нужен, как я уже говорил - там для сжатия есть штатные средства. Также надо отметить, что здесь я документации по нему не нащёл, хотя в портах стоит именно эта ссылка, зато на домашней странице нашлась вся необходимая инфа.
   После установки раскомментируем следующие строки в конфиге апаче, находящиеся в секции модулей:
/usr/local/etc/apache/httpd.conf
#LoadModule gzip_module        libexec/apache/mod_gzip.so
#AddModule mod_gzip.c

А также добавим куда-ньть в середину конфига такие строки:

<IfModule mod_gzip.c>
# включен ли модуль mod_gzip
mod_gzip_on                   Yes
# если положить в той же директории сжатый файл, 
# с таким же именем и указанным расширением
# (т.е. index.html и index.html.gz) то будет
# отдан сжатый файл,  а не сжиматься index.html
# удобно для экономии ресурсов CPU
mod_gzip_can_negotiate        Yes
# расширение сжатого файла (см. предыдущий пункт)
mod_gzip_static_suffix        .gz
AddEncoding              gzip .gz
# обновление сжатого файла. Если в директории лежит
# оригинальный файл, и сжатая версия (см. предыдущие
# три пункта) то при КАЖДОМ обращении к файлу,
# оригинал сжимается, и архивный вариант заменяется
# обновлённым. Наверно иногда и такое нужно :)
mod_gzip_update_static        No
# адрес, по которому можно посмотреть статус модуля mod_gzip
# на сервере - т.е. набираете адрес, типа
# http://www.site-name.ru/mod_gzip_status
# и видите - включен модуль или нет...
mod_gzip_command_version      '/mod_gzip_status'
# директория для временных файлов. Если не указана, то будет
# использовать дефолтовую - т.е. /tmp
mod_gzip_temp_dir             /tmp
# оставлять, или нет рабочие файла во временной директории - 
# если да, то он их оставляет. Надо заметить, что нужно это только
# для отладки, т.к. если оставить надолго этот пункт включенным,
# то место надиске может кончится :)
mod_gzip_keep_workfiles       No
# минимальный размер файла, который будет сжиматься.
# Если файл меньше этого размера, то он не сжимается.
# причина - сжатый часто оказывается больше исходного :)
mod_gzip_minimum_file_size    500
# максимальный размер файла который будет сжиматься. С очень большими
# файлами много времени уходит на сжатие, если машина слабая,
# или сильно загруженная - клиент может не дождаться...
# по дефолту тут было полмега - на мой взгляд, для моих условий 
# использования, неоправданно мало. Я увеличил до 5 мег.
mod_gzip_maximum_file_size    5000000
# максимальный размер файла, сжимаемого непосредственно в памяти
# - если файл большего рамера, то будет использоваться
# временный файл. Если версия mod_gzip больше 1.3.19.x 
# то если написано значение больше 60000 оно будет автоматически
# снижено до 60000 - связано с ограничениями некоторых ОС
# (а на мой взгляд, лучше б научили его зазбираться под какой ОС
# он работает, а не рубить все сразу...)
mod_gzip_maximum_inmem_size   60000
# минимальная версия протокола http поддерживаемая клиентом,
# начиная с которой будет работать mod_gzip
# 1000 = HTTP/1.0, 1001 = HTTP/1.1, и т.п.
mod_gzip_min_http             1000
# методы запроса, для которых будет работать mod_gzip
# аффтар рекомендует отключать POST в случае проблем
mod_gzip_handle_methods       GET POST
# исключения - версии браузеров, не умеющих коректно
# разбирать заголовки, или проводить декомпрессию
mod_gzip_item_exclude         reqheader  "User-agent: Mozilla/4.0[678]"
# То, что будет сжиматься - файлы с расширением .html
mod_gzip_item_include         file       \.html$
# исключения - ява скрипты и таблицы стилей.
# на самом деле современные браузеры корректно понимают
# сжатые скрипты и CSS - тока Netscape4 не переваривает
# но его немного - поэтому в принципе эти две строки можно
# закомментировать, или поменять `exclude` на `include`
mod_gzip_item_exclude         file       \.js$
mod_gzip_item_exclude         file       \.css$
# сжимаем всё с расширением .pl - это либо CGI-скрипты,
# вывод которых - html (если они у Вас выводят графику или ещё
# что-то подобное, надо закомментировать строку), либо просто
# скрипт не в директории /cgi-bin/ который будет показан как
# текст - так что надо жать.
mod_gzip_item_include         file       \.pl$
# жмём вывод всех скриптов
mod_gzip_item_include         handler    ^cgi-script$
# жмём всё, что apache посчитал текстом (собстно html`ки,
# листинг директорий, текстовые файлы....)
mod_gzip_item_include         mime       ^text/html$
mod_gzip_item_include         mime       ^text/plain$
mod_gzip_item_include         mime       ^httpd/unix-directory$
# не жмём картинки (толку-то... либо ничё не выиграешь,
# либо выигрыш мизерный - 1-2% да ещё и не все браузеры
# сжатые рисунки понимают.)
mod_gzip_item_exclude         mime       ^image/
# разрешить mod_gzip удалять заголовок 'Transfer-encoding: chunked'
# и отдавать страницу одним куском (некоторые скрипты отдают кусками)
mod_gzip_dechunk              Yes
# формат логов, если хотите, чтобы в них отображалось - была ли сжата страница,
# процент сжатия, исходный и сжатый размер...
# в одну строку оно у меня не влезло - пришлось перенести на 4 строчки
# если будуте копировать отсюда - уберите обратные слэши в конце
# каждой строки и сделайте снова одной строкой.
# P.S. :) Сам же скопировал и вставил - всё пучком, апач понимает
# и с экранированными переносами - можно как есть всё втыкать - работает
LogFormat                     "%h %l %u %t \"%V %r\" %<s %b \
mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n -< \
Out:%{mod_gzip_output_size}n = %{mod_gzip_compression_ratio}n \
pct." common_with_mod_gzip_info2
# куда класть лог с процентами сжатия & etc (см. предыдущий пункт)
CustomLog                     /var/log/mod_gzip.log common_with_mod_gzip_info2
# Непонял этот пункт - какой-то счётчик заголовков (размера заголовков)
# отданных сервером... Что считает, зачем... По дефолту считает - 
# ну и пусть считает...
mod_gzip_add_header_count     Yes
# посылать какой-то 'Vary' http хеадер.
# советуют не трогать, если не уверены в том, что делаете...
mod_gzip_send_vary            On
</IfModule>

У меня апач на тестовой машине не стоял, поэтому надо добавить строку в /etc/rc.conf, и запустить его. Если у Вас стоял - то только перезапустить:

/usr/local/etc/apache/>echo '' >> /etc/rc.conf
/usr/local/etc/apache/>echo 'apache_enable="YES"' >> /etc/rc.conf
/usr/local/etc/apache/>../rc.d/apache.sh restart
apache not running? (check /var/run/httpd.pid).
Starting apache.
/usr/local/etc/apache/>ps -ax | grep httpd
83313  ??  Ss     0:00.08 /usr/local/sbin/httpd
83314  ??  S      0:00.00 /usr/local/sbin/httpd
83315  ??  S      0:00.00 /usr/local/sbin/httpd
83316  ??  S      0:00.00 /usr/local/sbin/httpd
83317  ??  S      0:00.00 /usr/local/sbin/httpd
83318  ??  S      0:00.00 /usr/local/sbin/httpd
83320  p0  S+     0:00.01 grep httpd
/usr/local/etc/apache/>

Всё взлетело. Смотрим логи (предварительно я закинул туда несколько крупных html файлов):
192.168.20.141 - - [25/Jan/2006:15:22:10 +0300] "FreeBSD6 GET / HTTP/1.1" 200 2038 mod_gzip: SEND_AS_IS:RESPONSE_CONTENT_TYPE_EXCLUDED In:0 -< Out:0 = 0 pct.
192.168.20.141 - - [25/Jan/2006:15:22:16 +0300] "FreeBSD6 GET /stat/ HTTP/1.1" 200 644 mod_gzip: DECHUNK:OK In:1013 -< Out:404 = 61 pct.
192.168.20.141 - - [25/Jan/2006:15:22:29 +0300] "FreeBSD6 GET /stat/192.168.20.53/ HTTP/1.1" 200 15001 mod_gzip: DECHUNK:OK In:209592 -< Out:14759 = 93 pct.
192.168.20.141 - - [25/Jan/2006:15:22:36 +0300] "FreeBSD6 GET /stat/192.168.20.53/192.168.20.53.html HTTP/1.1" 200 58145 mod_gzip: OK In:684499 -< Out:57805 = 92 pct.
192.168.20.141 - - [25/Jan/2006:15:22:52 +0300] "FreeBSD6 GET /stat/192.168.20.53/d192.168.20.53.html HTTP/1.1" 200 2713 mod_gzip: OK In:20669 -< Out:2375 = 89 pct.
192.168.20.141 - - [25/Jan/2006:15:22:58 +0300] "FreeBSD6 GET /stat/192.168.20.53/tt192.168.20.53-205_188_248_199.html HTTP/1.1" 200 1504 mod_gzip: OK In:9921 -< Out:1166 = 89 pct.
192.168.20.141 - - [25/Jan/2006:15:23:09 +0300] "FreeBSD6 GET /stat/192.168.20.53/?S=A HTTP/1.1" 200 16592 mod_gzip: DECHUNK:OK In:209592 -< Out:16350 = 93 pct.
192.168.20.141 - - [25/Jan/2006:15:23:14 +0300] "FreeBSD6 GET /stat/192.168.20.53/tt192.168.20.53-au_download_windowsupdate_com.html HTTP/1.1" 200 9591 mod_gzip: OK In:300591 -< Out:9252 = 97 pct.
192.168.20.141 - - [25/Jan/2006:15:23:17 +0300] "FreeBSD6 GET /stat/192.168.20.53/tt192.168.20.53-counter_rambler_ru.html HTTP/1.1" 200 5691 mod_gzip: OK In:105310 -< Out:5352 = 95 pct.
192.168.20.141 - - [25/Jan/2006:15:23:28 +0300] "FreeBSD6 GET /stat/ HTTP/1.1" 200 644 mod_gzip: DECHUNK:OK In:1013 -< Out:404 = 61 pct.
192.168.20.141 - - [25/Jan/2006:15:23:32 +0300] "FreeBSD6 GET /stat/192.168.20.46/ HTTP/1.1" 200 18004 mod_gzip: DECHUNK:OK In:267673 -< Out:17762 = 94 pct.
192.168.20.141 - - [25/Jan/2006:15:23:34 +0300] "FreeBSD6 GET /stat/192.168.20.46/192.168.20.46.html HTTP/1.1" 200 71697 mod_gzip: OK In:873228 -< Out:71357 = 92 pct.
192.168.20.141 - - [25/Jan/2006:15:23:44 +0300] "FreeBSD6 GET /stat/192.168.20.46/d192.168.20.46.html HTTP/1.1" 200 2728 mod_gzip: OK In:20695 -< Out:2390 = 89 pct.
192.168.20.141 - - [25/Jan/2006:15:23:48 +0300] "FreeBSD6 GET /stat/192.168.20.42/ HTTP/1.1" 200 19603 mod_gzip: DECHUNK:OK In:278720 -< Out:19361 = 94 pct.
192.168.20.141 - - [25/Jan/2006:15:23:49 +0300] "FreeBSD6 GET /stat/192.168.20.42/192.168.20.42.html HTTP/1.1" 200 76139 mod_gzip: OK In:910830 -< Out:75799 = 92 pct.
192.168.20.141 - - [25/Jan/2006:15:23:54 +0300] "FreeBSD6 GET /stat/192.168.20.42/d192.168.20.42.html HTTP/1.1" 200 2576 mod_gzip: OK In:20530 -< Out:2238 = 90 pct.
192.168.20.141 - - [25/Jan/2006:15:23:59 +0300] "FreeBSD6 GET /stat/192.168.20.35/ HTTP/1.1" 200 8649 mod_gzip: DECHUNK:OK In:116350 -< Out:8408 = 93 pct.
192.168.20.141 - - [25/Jan/2006:15:24:01 +0300] "FreeBSD6 GET /stat/192.168.20.35/192.168.20.35.html HTTP/1.1" 200 32191 mod_gzip: OK In:380065 -< Out:31851 = 92 pct.
192.168.20.141 - - [25/Jan/2006:15:24:05 +0300] "FreeBSD6 GET /stat/192.168.20.35/tt192.168.20.35-36k_ru.html HTTP/1.1" 200 1234 mod_gzip: OK In:3154 -< Out:898 = 72 pct.
192.168.20.141 - - [25/Jan/2006:15:24:07 +0300] "FreeBSD6 GET /stat/192.168.20.35/tt192.168.20.35-459109_banners_zbs_ru.html HTTP/1.1" 200 1253 mod_gzip: OK In:3284 -< Out:917 = 73 pct.
192.168.20.141 - - [25/Jan/2006:15:24:09 +0300] "FreeBSD6 GET /stat/192.168.20.35/tt192.168.20.35-534083_banners_zbs_ru.html HTTP/1.1" 200 1246 mod_gzip: OK In:3169 -< Out:910 = 72 pct.

Чтож - процент сжатия хороший, тормозов я не заметил (тестовая машина - P-II, 350MHz, 64 RAM) - больше у моего браузера времени уходило на вывод страницы, чем на сжатие у фряхи. А по адресу http://192.168.20.100/mod_gzip_status я увидел следующий текст:
mod_gzip is available...
mod_gzip_version = 1.3.26.1a
mod_gzip_on = Yes

   Данный модуль, на мой взгляд, пригодится тем, у кого не очень быстрый канал, и при этом избыток ресурсов на машине которая торчит в инет... Прям как у меня на некоторых машинах :)



размещено: 2006-01-25,
последнее обновление: 2006-01-25,
автор: lissyara

оценить статью:





Хостинг HOST-FOOD

2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-22, Mufanu
named 9.7.0

Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
Подробное руководство по ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 39 чел.
За последние 30 мин было: 221 человек
За сегодня было
15746 показов,
1756 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1301 секунд
Из них PHP: 55%; SQL: 45%; Число SQL-запросов: 77 шт.
Исходный размер: 113938; Сжатая: 23235