Итак, сегодняшняя статья из класса "must read"! В которой я расскажу целых четыре чрезвычайно простых способа настроить gzip, для тех кто ещё не знает как это сделать. Когда я на работе вижу ссылку на html размером в пару мегабайт (который сжимается до 200 кб), я не знаю смеяться или плакать, вот эти способы:
- Если ваш сайт полностью статичен, т.е. не написан на php, и в качестве веб-сервера используется apache, вы можете создать .htaccess файл в главной директории сайта следующего содержания:
# сжимать весь текст и html:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
# или, сжимать определённые типы файлов, по расширению:
<Files *.html>
SetOutputFilter DEFLATE
</Files> - Второй способ, пригодится если ваш сайт использует PHP, и по каким-либо причинам вы не можете/хотите менять исходный код. Если в качестве веб-сервера у вас используется apache, то в данном случае вы опять таки можете создать .htaccess файл с содержанием:
php_value output_handler ob_gzhandler
Это включит в качестве пост-обработки для ваших скриптов функцию ob_gzhandler, эта функция сама проверяет наличие в запросе клиента заголовков accept_encoding, и т.п. - Третий способ, то что используют наши программисты, это использование "буфера выхода" (output buffering) в PHP. Для этого вам надо использовать следующие функции:
// В начале файла: ob_start("ob_gzhandler"); // В конце файла: ob_end_flush();
- Четвёртый способ, это настройка соответствующего поведения у Nginx, он подойдёт если в качестве веб-сервера у вас используется что-то отличное от апача, например Lighttpd, или если вся статика отдаётся напрямую им, минуя apache.
Включаем GZip в Nginx, в файле /usr/local/etc/nginx/nginx.conf
http { ... # Включение модуля gzip on; # Минимальная длина ответа, при которой модуль будет жать, в байтах gzip_min_length 1000; # Разрешить сжатие для всех проксированных запросов gzip_proxied any; # MIME-типы которые необходимо жать gzip_types text/plain text/html text/xml application/xml application/x-javascript text/javascript text/css text/json; # Запрещает сжатие ответа методом gzip для IE6 gzip_disable "msie6"; # Уровень gzip-компрессии gzip_comp_level 8; ... }
Полное описание всех директив модуля http://sysoev.ru/nginx/docs/http/ngx_http_gzip_module.html.
Если вы изменяете конфиг апача или nginx, то не забудьте перезапустить соответствующий сервис.
Надеюсь, что очень просто описала настройку данной технологии сайте. Пожалуйста, если вы хотите способствовать распространению этой технологии, не стесняйтесь давать ссылку людям, которые не в курсе, на эту страницу. Спасибо.