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

59 lines
5.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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