mod_deflate или экономный apache

()

Владельцы веб-серверов постоянно стараются проявить заботу о пользователях, дабы расположенные на этих серверах сайты пользовались возможно большей популярностью. Сейчас уже стало правилом хорошего тона отдавать пользователю странички, сжатые gzip.

Реализовать сжатие страниц на сервере достаточно просто. В этой статье будет показано как настроить сжатие страниц на веб-сервере apache2 под управлением Debian/Ubuntu Linux.

Итак. Будем считать что веб-сервер установлен. Так же установлены все необходимые модули. Включаем в apache mod_deflate и перезапускаем apache:

ln -s /etc/apache2/mods-available/deflate.* /etc/apache2/mods-enabled/
apache2ctl restart

В принципе уже после этого сервер начинает выдавать сжатые странички. Убедиться в этом можно следующей командой:

w3m -dump_head http://127.0.0.1/

Вывод команды должен выглядеть примерно вот так (жирным отмечено то, на что следует обратить внимание):

HTTP/1.1 200 OK
Date: Tue, 18 Mar 2008 10:20:40 GMT
Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.3
X-Powered-By: PHP/5.2.3-1ubuntu6.3
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html

Однако у модуля mod_deflate есть множество настроек, которые позволяют управлять сжатием а так же записывать в логи информацию о сжатии.

В Ubuntu/Debian эти настойки хранятся в файле /etc/apache2/mods-available/deflate.conf. По умолчанию этот файл имеет вид:

<IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>

Все доступные настройки описаны на этой странице. Рассмотрим только некоторые из них.

Во-первых конечно же нам интересна степень сжатия. По умолчанию она равна степени сжатия по умолчанию для библиотеки zlib. Т.е. 6. Возможные значения - от 1 (слабое сжатие) до 9 (максимальное сжатие). Добавим строчку, описывающую максимальное сжатие. Файл примет вид:

<IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml
          DeflateCompressionLevel 9
</IfModule>

Далее определим дополнительные типы файлов, которые тоже не плохо бы сжимать:

<IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
          DeflateCompressionLevel 9
</IfModule>

Наконец определим новый формат лога - deflate (зачем это нужно - станет ясно дальше):

<IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
          DeflateCompressionLevel 9
          DeflateFilterNote Input instream
          DeflateFilterNote Output outstream
          DeflateFilterNote Ratio ratio
          LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
</IfModule>

Теперь если мы хотим пронаблюдать как сжимаются данные с какого-либо виртуального хоста, мы должны добавить к описанию виртуального хоста примерно вот такую строку:

CustomLog /var/log/apache2/virtualhostname-deflate.log deflate

Лог будет иметь следующий вид:

"запрос" сжатый_размер/реальный_размер сжатие%

При желании можно написать простенький скрипт для разбора этого лога (оставим это читателю:)). Автор надеется что эта информация была полезной.

Ключевые слова: apache, mod_deflate, gzip, zlib.

Комментарии:

Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE

умные часы купить