Помощник веб-разработчикаСтатьиИнструменты

Nginx: раздача сжатого статичного контента

Сжатие методом «gzip», по моим наблюдениям, позволяет уменьшить размер контента на 28%-70%. Раздавая заранее сжатый контент, можно увеличить скорость его отдачи не увеличивая нагрузку на сервер, в отличие от потокового сжатия.

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

--with-http_gzip_static_module

Готовые пакеты nginx собраны уже с этим модулем.

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

gzip_static on;

Если сервер отдаёт сжатый контент, то он должен уведомить об этом клиента отправив в заголовке поле «Vary: Accept-Encoding», большинство браузеров (если не все) могут работать с таким контентом и без этого поля в заголовке, но вот поисковики ругаются, для отправки этого поля, надо вписать в блок директиву:

gzip_vary on;

Таким образом блок будет иметь примерно такой вид:

location / {
	gzip_static on;
	gzip_vary on;
}

Далее перезагружаем сервер командой:

nginx -s reload

Теперь, при обработке запроса, nginx в первую очередь будет проверять наличие сжатой копии запрашиваемого файла, т.е, если клиент запросит файл типа «file.css», то сервер будет сначала искать «file.css.gz».

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

Кроме того, при включённом gzip_static, nginx учитывает директивы:

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