Настройка сжатия Gzip (ngx_http_gzip_module) в Nginx
Сжатие файлов необходимо для ускорения отдачи страниц. Работает это таким образом, что во время загрузки страницы она сжимается на сервере и передается в браузер пользователю уже в сжатом виде. После чего браузер распаковывает страницу и отображает посетителю.
Данная функция не всегда работает на практике (некоторые типы файлов сжимаются лучше чем другие), так файлы .jpeg или .png в исходном виде сжатые, поэтому их сжатия и уменьшения размера не происходит. Тогда как текстовые файлы можно уменьшить почти вдвое.
Сжатие файлов использует значительные ресурсы сервера, поэтому рекомендовано сжимать только те файлы, которые в результате значительно уменьшат его размер. Если потребление ресурсов будет превышено, то отображения страницы вообще не произойдет и пользователь будет получать ошибку
Шаг 1: Тест работы программы сжатия файлов
Документация Nginx Модуль ngx_http_gzip_module.
Для начала создадим пару файлов в дефолтном каталоге Nginx для тестирования сжатия файлов с помощью gzip.
Nginx для определения типа файла распознает его расширение, определяя MIME-тип (отвечает за назначение файла), поскольку это быстрее способ чем анализ содержимого файла.
Из-за этого поведения содержимое текстовых файлов не учитывается. Правильно присвоив имена файлам, можно указать Nginx, что один полностью пустой файл является изображением, а иной например, таблицей стилей.
Для тестирования создаем файл test.html (HTML-страница) в каталоге Nginx по умолчанию, используя truncate, размер которого 1 кб чтобы сжатие было незаметным.
truncate -s 1k /var/www/html/test.html
Создадим проверочные файлы для форматов .jpg, .css и .js.
truncate -s 1k /var/www/html/test.jpg truncate -s 1k /var/www/html/test.css truncate -s 1k /var/www/html/test.js
Шаг 2: Тестирование стандартного поведения сервера при работе с .html файлом
Веб-сервер Nginx отдает сжатый файл в ответ на запрос с заголовком HTTP (Accept-Encoding: gzip)
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
вы получите ответ сервера, который свидетельствует о том, что для отправки этого файла использовалось сжатие:
HTTP/1.1 200 OK Server: nginx/1.14.0 (Ubuntu) Date: Sat, 18 Jul 2020 13:12:13 GMT Content-Type: text/html Last-Modified: Sat, 18 Jul 2020 13:11:57 GMT Connection: keep-alive Content-Encoding: gzip
В настройках по умолчанию веб-сервера Nginx прописана поддержка сжатия формата .html, другие расширения обслуживаются в исходном размере. Проверить это можно в файле test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
Получаем вывод:
HTTP/1.1 200 OK Server: nginx/1.14.0 (Ubuntu) Date: Sat, 18 Jul 2020 13:12:41 GMT Content-Type: image/jpeg Content-Length: 0 Last-Modified: Sat, 18 Jul 2020 13:12:01 GMT Connection: keep-alive ETag: "569e973e-0" Accept-Ranges: bytes
В выводе отсутствует Content-Encoding: gzip заголовок, то есть файл отдается без сжатия. Удостоверимся также на формате .css:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
получаем такой же результат в выводе, с отсутствием в заголовке Content-Encoding: gzip
Шаг 3: Настройка параметров gzip в Nginx
Настроим Nginx для обслуживания всех форматов файлов. Изменяем gzip конфигурацию, внося коррективы в файл конфигурации /etc/nginx/nginx.conf.
- Запретим сжимать файлы меньше 100 байт (которые не выигрывают от сжатия, а как мы уже знаем, само сжатие потребляет значительные ресурсы). Для этого используем директиву gzip_min_length (по умолчанию gzip_min_length равно 20).
- Добавим в gzip_types директиву с дополнительными типами файлов, обозначающими веб-шрифты, .ico значки и изображения .svg. Директива gzip_types разрешает сжатие ответа методом gzip для указанных MIME-типов в дополнение к text/html. Специальное значение "*" соответствует любому MIME-типу. Ответы с типом text/html сжимаются всегда.
## # Gzip Settings ## gzip on; gzip_min_length 100; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; # Устанавливает минимальную HTTP-версию запроса, необходимую для сжатия ответа gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
Сохраняем и закрываем файл.
После закрытия проверяем корректность синтаксиса конфигурационного файла:
nginx -t
Если проверка прошла успешно, то выполняем перезагрузку Nginx, чтобы изменения применились.
systemctl restart nginx.service
Шаг 4: Тестирование обновленной конфигурации
Повторите команды из Шаг 2.
Согласно внесенным правкам, исключено сжатие только для расширения.jpg. Для других типов файлов сжатие активно, о чём будет свидетельствовать Content-Encoding: gzip заголовок в выводе. Если это так, вы успешно настроили gzip сжатие в Nginx.
Как видите изменить конфигурацию Nginx для использования сжатия gzip несложно, но преимущества могут быть огромными. Мало того, что посетители с ограниченной пропускной способностью получат сайт быстрее, все остальные пользователи также увидят заметный прирост скорости. Поисковые системы будут рады быстрой загрузке сайта. Скорость загрузки теперь является важным показателем того, как поисковые системы ранжируют веб-сайты, и использование gzip — один из больших шагов к ее улучшению.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах