digital-garden/_inbox/GZIP сжатие в Nginx.md
2024-06-13 21:01:37 +03:00

5.0 KiB
Raw Blame History

aliases tags date zero-link parents linked link
зрелость/🌱
2024-04-07
00 Nginx
https://struchkov.dev/blog/ru/nginx-optimization/#%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5-gzip

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

Большинство клиентов и серверов поддерживают gzip. Когда gzip-совместимый клиент/веб-браузер запрашивает ресурс у сервера с поддержкой Gzip, сервер сжимает ответ перед отправкой обратно клиенту.

Общая конфигурация Gzip-сжатия может выглядеть следующим образом. Откройте основной файл конфигурации /etc/nginx/nginx.conf и добавьте следующие директивы в блок server.

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_min_length устанавливает минимальную длину ответов, для которых будет применяться сжатие. По умолчанию 20, но имеет смысл поставить больше, так как постоянное сжатие приводит к повышению нагрузки на процессоры сервера и клиента.

gzip_vary - позволяет кэшировать как сжатые, так и обычные версии ресурса.

gzip_proxied Разрешает или запрещает сжатие ответа методом gzip для проксированных запросов в зависимости от запроса и ответа. То, что запрос проксированный, определяется на основании наличия поля “Via” в заголовке запроса. В директиве можно указать одновременно несколько параметров.

[!NOTE]- Параметры gzip_proxied

  • 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 сжатие применяться не будет, так как данный браузер не умеет принимать сжатые ответы.