Сжатие файлов необходимо для ускорения отдачи страниц. Работает это таким образом, что во время загрузки страницы она сжимается на сервере и передается в браузер пользователю уже в сжатом виде. После чего браузер распаковывает страницу и отображает посетителю.
Данная функция не всегда работает на практике (некоторые типы файлов сжимаются лучше чем другие), так файлы .jpeg или .png в исходном виде сжатые, поэтому их сжатия и уменьшения размера не происходит. Тогда как текстовые файлы можно уменьшить почти вдвое.
Сжатие файлов использует значительные ресурсы сервера, поэтому рекомендовано сжимать только те файлы, которые в результате значительно уменьшат его размер. Если потребление ресурсов будет превышено, то отображения страницы вообще не произойдет и пользователь будет получать ошибку
Документация 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
Веб-сервер 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
Настроим Nginx для обслуживания всех форматов файлов. Изменяем gzip конфигурацию, внося коррективы в файл конфигурации /etc/nginx/nginx.conf.
## # 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
Повторите команды из Шаг 2.
Согласно внесенным правкам, исключено сжатие только для расширения.jpg. Для других типов файлов сжатие активно, о чём будет свидетельствовать Content-Encoding: gzip заголовок в выводе. Если это так, вы успешно настроили gzip сжатие в Nginx.
Как видите изменить конфигурацию Nginx для использования сжатия gzip несложно, но преимущества могут быть огромными. Мало того, что посетители с ограниченной пропускной способностью получат сайт быстрее, все остальные пользователи также увидят заметный прирост скорости. Поисковые системы будут рады быстрой загрузке сайта. Скорость загрузки теперь является важным показателем того, как поисковые системы ранжируют веб-сайты, и использование gzip — один из больших шагов к ее улучшению.