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

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

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Уменьшаем размер загружаемого контента и ускоряем загрузку сайта с помощью модуля gzip в NGINX

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
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 байт.

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

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

1
systemctl restart nginx

Проверяем.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 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
On this page