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