Сейчас достаточно популярны мобильные устройства, но, мобильный интернет по прежнему отстаёт от проводного как по скорости, так и по цене (особенно в роуминге). Поэтому, это, в первую очередь, забота о пользователях.
Но надо сказать, что тут есть и проблемы: некоторые старые или другие особо выдающиеся браузеры не поддерживают gzip-сжатие. Но нам повезло, эта проблема волнует достаточно многих, поэтому для её решения особо заморачиваться не придётся.
К делу, открываем конфиг nginx (
/etc/nginx/nginx.conf) и или вписываем, или раскомменчиваем следующие строки:
http {
<...>
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
Здесь мы включаем сжатие в контексте "http" (первая строка), но можно делать и в других контекстах: "server", "location", "if in location".
Теперь небольшие пояснения:
gzip on - включает поддержку gzip в целом;
gzip_disable "msie6" - отключает сжатие для эксплорера 5.5 и 6, т.к. не поддерживается;
gzip_buffers - устанавливает размер буффера, в котором хранится сжатая информация;
gzip_complevel - уровень сжатия, 1 - минимальное, 9 - максимальное;
gzip_proxied any - сжимать данные ответов для proxy-серверов;
gzip_types - MIME-types ответов, которые должны быть сжаты;
gzip_vary on - включает добавление в ответ заголовка "Vary: Accept-Encoding", для IE 4-6 это приведёт к некешированию данных из-за бага.
После редактирования не забываем перезагрузить сервер. Например, командой:
sudo service nginx restart
И проверить что данные действительно сжимаются. Это можно сделать посмотрев заголовок ContentEncoding через firebug, chrome dev tools или, например, так:
$ curl
http://ваш_сайт.ру/ -I --compressed | grep Content-Encoding
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Content-Encoding: gzip
Этот способ включит сжатие данных "на лету" - т.е. во время формирования ответа, что должно увеличить нагрузку на CPU и использование памяти сервера, однако, снизить количество траффика. Если у вас много статических данных, которые вы бы не хотели сжимать на лету, то можно использовать модуль HttpGzipStaticModule для прекомпрессии да