Nginx: раздача gzip.

Сжатие методом «gzip», может уменьшить размер файла в несколько раз. Раздача заранее сжатых файлов, увеличивает скорость их отдачи и снижает трафик, кроме того, за счёт более быстрой отдачи файлов снижается и вычислительная нагрузка на сервер. Для сжатия динамичного контента требуются иные настройки, об этом в инструкции по настройке потокового сжатия.

Для раздачи сжатых файлов, «nginx» должен быть собран с модулем «ngx_http_gzip_static_module», который по умолчанию не включается в сборку. Готовые пакеты nginx собраны уже с этим модулем.

Перед настройкой сервера нужно сжать раздаваемые файлы в «gzip». Чем выше уровень сжатия, тем выше скорость отдачи файла и меньше трафик, потому, обычно, лучше сжимать на уровне 9 (максимальный). На выходе архив должен иметь то же название и расширение, что и у оригинала, но в конце должен быть добавлен тип архива «.gz» (некоторые утилиты могут не указывать тип архива). Переименовывать запрашиваемые файлы на клиентской стороне не нужно, если клиент запросит файл «file.css», то сервер будет сначала искать «file.css.gz», если такого архива нет, может быть отдан оригинал (зависит он настройки).

Раздача сжатого контента включается директивой «gzip_static», в контексте «http», «server» или «location». Контекст «http» по умолчанию находится в файле «/etc/nginx/nginx.conf», а «server» и «location» в «/etc/nginx/conf.d/default.conf».gzip_static значение;

  • значение «on» — разрешает проверку наличия сжатой копии файла, если таковой отсутствует или метод не поддерживается клиентом, будет отдан оригинал;
  • значение «always» — во всех случаях будет отдавать только сжатый файл, без проверки поддержки метода браузером.
  • «off» — запрещает проверку сжатого файла.

Если сервер отдаёт сжатый контент, то он должен уведомить об этом клиент отправив в заголовке поле «Vary: Accept-Encoding», отправка этого поля включается директивой «gzip_vary on», таким образом минимальная конфигурация будет иметь примерно такой вид:location / { gzip_static on; gzip_vary on; }

Чтобы изменения в конфигурационном файле вступили в силу, необходимо перезагрузить сервер:sudo nginx -s reload

При включённой раздаче сжатых файлов, nginx так же учитывает директивы:

Комментарии
Полезные ссылки: