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