rizloff
Веб

Сжатие gzip через .htaccess: mod_deflate

2 мин чтения

Страницы, стили и скрипты — это текст, а текст отлично жмется. Браузер давно умеет принимать сжатые ответы, осталось попросить об этом сервер. На Apache 2.2 этим занимается модуль mod_deflate.

Включаем

В .htaccess в корне сайта:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript application/x-javascript

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

Первые две строки говорят, что сжимать: html, текст, xml, стили и скрипты. Картинки сюда не пишем, jpg и png уже сжаты, второй раз их жать бесполезно.

Три строки BrowserMatch взяты из документации Apache. Это для совсем старых браузеров, которые сжатие понимают через раз. IE6 и новее получают сжатым все, а Netscape 4 только html или вообще ничего.

Обертка IfModule нужна, чтобы сайт не упал с ошибкой 500, если модуля на хостинге нет. Тогда правила просто не сработают.

Проверяем

Проще всего curl, с заголовком, который шлет браузер:

curl -I -H 'Accept-Encoding: gzip' http://example.com/

В ответе должна быть строка Content-Encoding: gzip. Нет ее, значит модуль на хостинге выключен или правила не применились. Тогда пишем в поддержку: у нормального хостера mod_deflate включают по просьбе.

Что дает

На моем блоге главная страница ужалась в несколько раз, стили и скрипты примерно так же. Для тех, кто сидит на медленном интернете или по GPRS с телефона, разница очень заметная. Нагрузка на процессор сервера от сжатия есть, но на маленьком сайте ее не видно.

Что-то не сработало или нашли ошибку — напишите: rizloff@gmail.com или @rizloff в Telegram.