Главная > Unix-like, Администрирование > Nginx: Включаем gzip-сжатие на лету.

Nginx: Включаем gzip-сжатие на лету.

Для начала, обсудим для чего это нужно.

Раньше я не уделял внимания этому, но, закрыв тикет о включении gzip-сжатия на одном из текущих проектов, над которыми я работаю, - задумался, а зачем? Скорее всего, вам, как и мне, не жалко траффика с вашего сервера, да и уже много где есть безлимитные высокоскоростные каналы связи. Однако, это не всегда так, и основная цель - не уменьшить траффик с сервера (хотя это логичное следствие), а уменьшить траффик для клиента. Сейчас достаточно популярны мобильные устройства, но, мобильный интернет по прежнему отстаёт от проводного как по скорости, так и по цене (особенно в роуминге). Поэтому, это, в первую очередь, забота о пользователях.

Но надо сказать, что тут есть и проблемы: некоторые старые или другие особо выдающиеся браузеры не поддерживают 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://zetblog.ru/ -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 для прекомпрессии данных.

Пожалуйста, оцените полезность и качество данной статьи. Одна звезда - плохо, 5 - хорошо.
1/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.2/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.3/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.4/5.5/5. (4 голосов, средний: 5,00 из 5)
Загрузка...
  1. Дмитрий
    9 февраля 2014 в 22:50 | #1

    Спасибо, кратко и понятно что куда надо вставлять)

  2. Иван
    27 февраля 2014 в 21:16 | #2

    Хорошая и полезная статья, то что искал. А на VDS средней поршивости пойдёт?

  3. lizz
    28 февраля 2014 в 14:19 | #3

    @Иван
    Минимальный тариф от digital ocean (512mb RAM, 1 ядро, по частоте увы, не скажу) - всё ок. Но вообще, если хочется экономить ресурсы, то можно сжимать и не на лету.

  4. Сергей
    20 мая 2014 в 13:53 | #4

    я только что себе поставил тоже, там же. Хотелось бы узнать - наблюдались ли какието изменения с 28 февраля ?@ lizz

  5. lizz
    4 июня 2014 в 20:05 | #5

    @Сергей

    В каком плане изменения?

    Вроде всё работает, нареканий нет. Как-то был наплыв посетителей на одном ресурсе - до 7к в сутки, всё работало без проблем. Или вы о чём?

  6. prostolinux
    2 февраля 2015 в 16:01 | #6

    Спасибо, реально помогли, а то тест выдавал отсутствие сжатия и я уже и не знал как это сделать!

  1. Пока что нет уведомлений.