Создание, продвижение сайтов
40-33-54

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

16 декабря 2019

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

Раньше я не уделял внимания этому, но, закрыв тикет о включении 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 / -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 для прекомпрессии данных.

 

Статьи

Сделайте заказ с сайта и получите 10% скидку на услугу

Заказ услуги с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Заказать бесплатную SEO-консультацию

Запрос бесплатной SEO - консультации с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Письмо в компанию Райбин

Письмо в компанию RAYBIN

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.