Одним из самых эффективных способов ускорить работу веб-сервера Nginx является включение GZIP-сжатия. GZIP обеспечивает сжатие без потерь, что означает, что исходные данные можно полностью восстановить при распаковке. Сжатие основано на алгоритме DEFLATE, который сочетает в себе алгоритмы LZ77 и Хаффмана.

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

Пример конфигурации для включения GZIP-сжатия в Nginx. Откройте основной файл конфигурации /etc/nginx/nginx.conf и добавьте следующие директивы в блок http:

http {
  ...
 
    gzip                on;
    gzip_min_length     500;
    gzip_vary           on;
    gzip_proxied        expired no-cache no-store private auth;
    gzip_types          text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xml+rss application/json;
    gzip_disable        "msie6";
    gzip_comp_level 6;
    gzip_buffers 16 8k;
 
  ...
}

gzip — включает сжатие GZIP на сервере.

gzip_min_length — устанавливает минимальный размер ответа, для которого будет применяться сжатие. По умолчанию значение равно 20 байтам, но имеет смысл установить большее значение (например, 500 байт), так как сжатие слишком маленьких файлов может создать ненужную нагрузку на процессоры сервера и клиента.

gzip_vary — добавляет заголовок Vary: Accept-Encoding в ответ сервера. Это позволяет кэшировать как сжатые, так и несжатые версии одного ресурса в зависимости от того, поддерживает ли клиент GZIP-сжатие.

gzip_proxied — определяет, нужно ли сжимать ответы для проксированных запросов в зависимости от их содержимого. Запрос считается проксированным, если в его заголовке присутствует поле Via. Можно указать несколько условий для применения сжатия:

off отключает сжатие для всех проксированных запросов.

expired разрешает сжатие, если в заголовке ответа есть поле Expires, запрещающее кэширование.

no-cache сжатие разрешено, если в заголовке ответа есть поле Cache-Control с параметром no-cache.

no-store сжатие разрешено, если в заголовке ответа есть поле Cache-Control с параметром no-store.

private разрешает сжатие, если в заголовке ответа есть поле Cache-Control с параметром private.

no_last_modified разрешает сжатие, если в заголовке ответа отсутствует поле Last-Modified.

no_etag разрешает сжатие, если в заголовке ответа нет поля ETag.

auth сжатие разрешено, если в заголовке запроса есть поле Authorization.

any разрешает сжатие для всех проксированных запросов без ограничений.

gzip_types по умолчанию включено сжатие для ответов типа текст. В данном параметре можно перечислить все необходимые типы ответов.

gzip_disable запрещает для перечисленных параметров заголовка User-Agent сжатие. В данном примере для Internet Explorer 6 сжатие применяться не будет, так как данный браузер не умеет принимать сжатые ответы.

gzip_types — задает список типов MIME, для которых будет применяться сжатие. По умолчанию GZIP включен для ответов типа text/*. В данном примере сжатие включено для текстовых файлов, CSS, JavaScript и JSON.

gzip_disable — отключает сжатие для определенных клиентов. В данном примере сжатие отключено для браузера Internet Explorer 6 (определяется по значению User-Agent), так как этот браузер не поддерживает работу с GZIP-ответами.

gzip_comp_level — устанавливает уровень сжатия. Рекомендуемое значение — 6, так как оно обеспечивает баланс между скоростью сжатия и эффективностью (по умолчанию уровень сжатия равен 1, а максимальный — 9).

gzip_buffers — задает количество и размер буферов для хранения сжатых данных перед отправкой клиенту. В данном случае установлено 16 буферов по 8К.


Мета информация

Область:: 00 Nginx
Родитель:: GZIP
Источник::
Автор::
Создана:: 2024-04-07

Дополнительные материалы

Дочерние заметки