Владельцы веб-серверов постоянно стараются проявить заботу о пользователях, дабы расположенные на этих серверах сайты пользовались возможно большей популярностью. Сейчас уже стало правилом хорошего тона отдавать пользователю странички, сжатые 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
Лог будет иметь следующий вид:
"запрос" сжатый_размер/реальный_размер сжатие%
При желании можно написать простенький скрипт для разбора этого лога (оставим это читателю:)). Автор надеется что эта информация была полезной.