Linux сжатие на лету

Настройка модуля GZIP в NGINX

GZIP — популярная программа сжатия данных.
Выполним настройку NGINX на использование gzip для сжатия файлов, которые он обслуживает «на лету».

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

Сжатие файлов использует ресурсы сервера, поэтому лучше всего сжимать только те файлы, которые значительно уменьшат размер в результате. Текстовые файлы сжимаются хорошо, JPEG или PNG уже сжаты по своей природе и большого результата при сжатии их GZIP можно не ожидать.

Модуль GZIP по умолчанию установлен в NGINX, необходимо включить его и настроить.

Создаем новый конфигурационный файл /etc/nginx/conf.d/gzip.conf :

gzip on;
gzip_disable «msie6»;

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 1100;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

gzip on — включаем поддержку GZIP сжатия.

gzip_disable «msie6» — исключаем IE6 из браузеров, которые будут получать сжатые файлы. (не поддерживает GZIP)

gzip_buffers — задаёт число и размер буферов, в которые будет сжиматься ответ. По умолчанию размер одного буфера равен размеру страницы. В зависимости от платформы это или 4K , или 8K .

gzip_proxied — сжимать данные ответов для proxy-серверов;

gzip_vary on — включает добавление в ответ заголовка «Vary: Accept-Encoding» , для IE4-6 это приведёт к не кешированию данных из-за бага.

gzip_comp_level 6 — устанавливаем, сколько файлов будет сжато. Чем выше число, тем выше уровень сжатия и использование ресурсов. уровень сжатия, 1 — минимальное, 9 — максимальное;

gzip_http_version 1.1 — директива используется для ограничения сжатия gzip для браузеров, поддерживающих протокол HTTP/1.1. Если браузер не поддерживает его, вероятно, что он не поддерживает и gzip.

gzip_min_length 1100 — сообщаем NGINX не сжимать файлы размером менее 256 байт.

Читайте также:  Linux точка перед папкой

gzip_types — отображает все типы MIME, которые будут сжаты. В этом случае список включает страницы HTML, таблицы стилей CSS, файлы Javascript и JSON, файлы XML, значки, изображения SVG и веб-шрифты.

Для применения настроек перезагрузим NGINX.

$ curl -H «Accept-Encoding: gzip» -I https://bogachev.biz
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 30 Oct 2017 20:26:17 GMT
Content-Type: text/html; charset=UTF-8
Last-Modified: Tue, 24 Oct 2017 20:02:54 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/«59ef9c6e-15be3»
Strict-Transport-Security: max-age=31536000;
Content-Security-Policy-Report-Only: default-src https:; script-src https: ‘unsafe-eval’ ‘unsafe-inline’; style-src https: ‘unsafe-inline’; img-src https: data:; font-src https: data:; report-uri /csp-report
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Encoding: 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».

Читайте также:  Simple image editor linux

Теперь небольшие пояснения:

  • 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 для прекомпрессии данных.

Источник

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

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

Читайте также:  Arch linux qemu guest agent

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

Источник

Оцените статью
Adblock
detector