Сжатие страниц (gzip) на лету в apache22 при помощи фильтров и mod_deflate

В отличие от первого апача, где mod_gzip прекрасно работал, под вторым оный модуль работает куда как хуже. И связано это с тем, что во втором апаче сжатие страниц на лету реализовано встроенными средствами. Впрочем, несмотря на это, многие всё ещё по старой памяти пытаются прикрутить mod_gzip, что делать не рекомендуется.

Чтобы включить сжатие во втором апаче, я создал такой файл:

Конфиг апача - /usr/local/etc/apache22/Includes/gzip-output.conf
1
2
3
4
SetOutputFilter DEFLATE

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html

В результате все страницы типа text/plain и text/html стали сжиматься, если браузер поддерживал сжатие. Проверка результата осуществлялась с помощью утилиты wget:

zg# wget -S --spider http://localhost/1.txt -o /dev/stdout | grep -i content
  Content-Length: 118548
  Content-Type: text/plain
zg# wget -S --spider http://localhost/1.txt --header "Accept-Encoding: gzip,deflate" -o /dev/stdout | grep -i content
  Content-Encoding: gzip
  Content-Length: 3438
  Content-Type: text/plain
zg#

Из результатов работы wget видно, что страница была 118 килобайт, а получилась всего 3,4 килобайта.

Более подробную информацию по mod_deflate можно найти на сайте апача http://httpd.apache.org/docs/2.2/mod/mod_deflate.html#enable.