80 lines
6.9 KiB
Markdown
80 lines
6.9 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date: 2024-04-07
|
|||
|
---
|
|||
|
Одним из самых эффективных способов ускорить работу веб-сервера Nginx является включение GZIP-сжатия. GZIP обеспечивает сжатие без потерь, что означает, что исходные данные можно полностью восстановить при распаковке. Сжатие основано на алгоритме [DEFLATE](https://ru.wikipedia.org/wiki/Deflate), который сочетает в себе алгоритмы [LZ77](https://ru.wikipedia.org/wiki/LZ77) и [Хаффмана](https://ru.wikipedia.org/wiki/Код_Хаффмана).
|
|||
|
|
|||
|
Большинство современных клиентов и серверов поддерживают GZIP. Когда браузер или другой клиент, совместимый с GZIP, запрашивает ресурс у сервера с поддержкой GZIP, сервер сжимает ответ перед отправкой. Это позволяет значительно уменьшить объем передаваемых данных и ускорить загрузку страниц.
|
|||
|
|
|||
|
Пример конфигурации для включения GZIP-сжатия в Nginx. Откройте основной файл конфигурации `/etc/nginx/nginx.conf` и добавьте следующие директивы в блок `http`:
|
|||
|
|
|||
|
```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 на сервере.
|
|||
|
|
|||
|
`gzip_min_length` — устанавливает минимальный размер ответа, для которого будет применяться сжатие. По умолчанию значение равно 20 байтам, но имеет смысл установить большее значение (например, 500 байт), так как ==сжатие слишком маленьких файлов может создать ненужную нагрузку на процессоры сервера и клиента.==
|
|||
|
|
|||
|
`gzip_vary` — добавляет заголовок `Vary: Accept-Encoding` в ответ сервера. Это позволяет кэшировать как сжатые, так и несжатые версии одного ресурса в зависимости от того, поддерживает ли клиент GZIP-сжатие.
|
|||
|
|
|||
|
`gzip_proxied` — определяет, нужно ли сжимать ответы для проксированных запросов в зависимости от их содержимого. Запрос считается проксированным, если в его заголовке присутствует поле 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 сжатие применяться не будет, так как данный браузер не умеет принимать сжатые ответы.
|
|||
|
|
|||
|
`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К.
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../../meta/zero/00 Nginx|00 Nginx]]
|
|||
|
**Родитель**:: [[../../algorithm/GZIP|GZIP]]
|
|||
|
**Источник**::
|
|||
|
**Автор**::
|
|||
|
**Создана**:: [[2024-04-07]]
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
|||
|
|