digital-garden/_inbox/GZIP сжатие в Nginx.md

59 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
tags:
- зрелость/🌱
date:
- - 2024-04-07
zero-link:
- "[[00 Nginx]]"
parents:
linked:
link: https://struchkov.dev/blog/ru/nginx-optimization/#%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5-gzip
---
Один из самых эффективных методов ускорить ответ от вашего веб-сервера nginx - это включить gzip сжатие. gzip обеспечивает сжатие без потерь, иными словами, исходные данные можно полностью восстановить при распаковке. Он основан на алгоритме [DEFLATE](https://ru.wikipedia.org/wiki/Deflate), который использует комбинацию алгоритма [LZ77](https://ru.wikipedia.org/wiki/LZ77) и алгоритма [Хаффмана](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B0%D1%84%D1%84%D0%BC%D0%B0%D0%BD%D0%B0).
Большинство клиентов и серверов поддерживают gzip. Когда gzip-совместимый клиент/веб-браузер запрашивает ресурс у сервера с поддержкой Gzip, сервер сжимает ответ перед отправкой обратно клиенту.
Общая конфигурация Gzip-сжатия может выглядеть следующим образом. Откройте основной файл конфигурации `/etc/nginx/nginx.conf` и добавьте следующие директивы в блок server.
```nginx
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 сжатие применяться не будет, так как данный браузер не умеет принимать сжатые ответы.