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

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
  VirtualBox + phpVirtualBox
  DNS API
  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

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

kmb, 2007-02-20 в 9:22:14

Эти опции в новых версиях отсутствуют:
#mod_gzip_static_suffix        .gz
#mod_gzip_update_static        No
#mod_gzip_handle_methods       GET POST
#mod_gzip_send_vary            On  


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

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

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

    вверх      
Статистика сайта
Сейчас на сайте находится: 21 чел.
За последние 30 мин было: 86 человек
За сегодня было
4953 показов,
717 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1396 секунд
Из них PHP: 56%; SQL: 44%; Число SQL-запросов: 77 шт.
Исходный размер: 111784; Сжатая: 22210