mod_deflate экономит время и деньги
Модуль mod_deflate позволяет экономить до 70-90% трафика на страницах с текстовым контентом (HTML, css, js, xml). В зависимости от числа графики, флеш, архивов и других несжимаемых элементов на ваших сайтах, экономия может составлять от 10-90% от всего трафика.
Прочитав документацию и результаты применения модуля deflate на других сайтах, решил попробовать его у себя. Под apache 1.3.xx нужно устанавливать модуль mod_deflate Игоря Сысоева, но во 2-й версии появился одноименный родной модуль mod_deflate. Устаноку я проводил под Apache 2.2.4 и 2.2.6 (первый стоит у меня под Windows, второй на FreeBSD 6.2).
Самый простой вариант, если apache уже собран с разрешением этих модулей (например, под Windows) подключить их динамически.
Чтобы был включен модуль deflate_module:
LoadModule deflate_module modules/mod_deflate.so
Также для корректной работы с прокси, необходимо добавлять заголовок, а для этого нужен модуль mod_headers:
LoadModule deflate_headers modules/mod_headers.so
Предварительно протестировал mod_deflate локально и остался очень доволен результатами. У меня основной контет именно текстовый, количество графики и других несжимаемых файлов минимально. Есть небольшое число js/css/xml файлов, которые в ближайшее время собираюсь “отобрать” от Apache.
Под FreeBSD необходимо переконфигурировать и пересобрать Apache 2.2.6. Когда я настраивал сервер, меня угораздило часть сервисов собрать руками и как водится в этом случае набить себе лишних шишек (т.к. никакой практической необходимости у меня собирать руками не было). Эта пересборка Apache не стала исключением:
При первой попытке:
./configure –enable-so –enable-modules=”deflate headers” –enable-deflate -enable-headers
make
Получил при выполнении make ошибку:
/usr/bin/ld: cannot find -lexpat
*** Error code 1
Stop in /usr/local/directadmin/custombuild/httpd-2.2.6/srclib/apr-util.
*** Error code 1
Stop in /usr/local/directadmin/custombuild/httpd-2.2.6/srclib/apr-util.
*** Error code 1
Stop in /usr/local/directadmin/custombuild/httpd-2.2.6/srclib.
Поиск в интернете привел к простому ее решению (и многочисленным упоминаниям о том, что собирать надо из портов, чтобы не было лишней возни), добавляем в конфиг:
–with-expat=/usr/local
Вторая попытка:
./configure –enable-so –enable-modules=”deflate headers” –enable-deflate –enable-headers –with-expat=builtin
Привела к аналогичной ошибке:
*** Error code 1
Stop in /home5/danm/httpd-2.2.6/support.
*** Error code 1
Stop in /home5/danm/httpd-2.2.6/support.
*** Error code 1
Stop in /home5/danm/httpd-2.2.6.
Поиск в google дал всего 2 упоминания о такой проблеме без ее решения, думаю вы уже догадались о ее решении:
–with-libiconv=builtin
Итак, моя финальная комбинация:
./configure –enable-so –enable-modules=”deflate headers” –enable-deflate –enable-headers –with-expat=builtin -with-libiconv=builtin
make
make install
Если вы переустанавливаете apache, то не забудьте до команды make install его остановить, собственно время остановки сервера составит 1-5 минут, верхняя граница в том случае, если вы перезагрузите сервер.
После этого остается настроить конфиг Apache. Надо учесть, что некоторые старые браузеры и прокси-сервера не поддерживают сжатие страниц. В помощи к Apache показано как это корректно учесть.
Первый вариан кода, который нужно включить в httpd.conf для сжатия текстовых данных:
<IfModule deflate_module>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xhtml+xml \
text/css application/x-javascript application/javascript
# исключаем Netscape 4.x, Netscape 4.06-4.08,
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE маскирующийся под Netscape включаем
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# для прокси отключаем сжатие
Header append Vary User-Agent env=!dont-vary
</IfModule>
Второй вариант, сжимающий все кроме некоторых типов несжимаемого контента (при необходимости добавьте по аналогии свои типы в строку с SetEnvIfNoCase) можно задать так:
<IfModule deflate_module>
SetOutputFilter DEFLATE
# исключаем Netscape 4.x, Netscape 4.06-4.08,
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE маскирующийся под Netscape включаем
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# для прокси отключаем сжатие
Header append Vary User-Agent env=!dont-vary
# исключаемые типы файлов
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico|swf|exe|t?gz|zip|bz2|sit|rar|7z|pdf)$ \
no-gzip dont-vary
</IfModule>
Выберите тот, который вам больше подходит и адаптируйте его под себя. После этого можно запустить apache и смотреть на результаты.
В моем случае главная страница сайта сократилась с 20 до 7кб. Большие списки (ну удобно в ряде случаев не бить их на страницы) еще более впечатляюще с 140 до 17кб. Беглый взгляд на загрузку сервера разницы не увидел, как было не более 2-3%, так и осталось. Основную нагрузку у меня по прежнему создает mysql. Проблем при работе с FireFox 2.0.11, IE 6/7, Opera 9.2x как и ожидалось не было. Итак, сжимайте!
