|
|
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
|
|
|
|
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"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
|
Комментарии пользователей [2 шт.]