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