Как безопасно включить Gzip или Brotli
Сначала определите сервер, CDN и фактические MIME-типы. Затем включите согласованное сжатие только для подходящих ответов, проверьте Vary, версию без сжатия и нагрузку.
Самый безопасный путь
Сообщение хостингу или разработчику
«Включите согласованное Gzip и доступный Brotli для HTML, CSS, JavaScript, JSON, XML и SVG на публичном уровне доставки. Не сжимайте повторно изображения, видео и архивы. Проверьте Content-Encoding, Vary: Accept-Encoding, Content-Type, ответы с Accept-Encoding и identity, CDN-кеш и размер до/после».
Сохраните конфигурацию virtual host/.htaccess, экспорт CDN и текущие заголовки контрольных URL. Убедитесь, что есть команда проверки конфигурации и быстрый откат до перезагрузки сервиса.
Пошаговая настройка
- Проверьте DNS и заголовки, чтобы понять, отвечает ли origin напрямую или через CDN/reverse proxy.
- Соберите HTML, CSS, JS, JSON и SVG с корректными
Content-Type; отдельно отметьте маленькие и персонализированные ответы. - Выберите один управляющий уровень. Не добавляйте противоречивые правила одновременно в приложение, Apache, Nginx и CDN.
- Включите Gzip для текстовых MIME-типов с разумным минимальным размером и умеренным уровнем CPU.
- Если CDN/сервер поддерживает Brotli, включите его с Gzip-fallback и не предполагайте поддержку только по панели.
- Настройте
Vary: Accept-Encodingи очистите затронутый кеш, чтобы варианты не смешались. - Проверьте ответ с
br, gzip, толькоgzipиidentity; сравните содержимое и размер. - Просмотрите CPU/latency после выпуска и повторите тест для desktop/mobile и динамического HTML.
Примеры конфигурации
Nginx
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript
application/json application/xml image/svg+xml;После правки выполните nginx -t, затем безопасную reload-команду вашей системы.
Apache / .htaccess
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css
AddOutputFilterByType DEFLATE application/javascript application/json
AddOutputFilterByType DEFLATE application/xml image/svg+xml
</IfModule>Модуль и разрешение директив должен подтвердить хостинг. Brotli настраивается отдельно, если доступен.
Риски и откат
| Симптом | Вероятная причина | Действие |
|---|---|---|
| Браузер показывает повреждённый текст | Двойное сжатие или неверный заголовок | Отключить дублирующий фильтр и очистить кеш |
| Gzip есть на origin, но нет публично | CDN меняет или кеширует ответ | Исправить edge-настройку и purge |
| Вырос CPU/TTFB | Слишком высокий уровень или мелкие ответы | Снизить уровень, добавить порог/предсжатие |
| Смешиваются варианты | Нет корректного Vary | Добавить заголовок и очистить общий кеш |
Для отката восстановите конфигурацию, проверьте её синтаксис, перезагрузите сервис и очистите только затронутый кеш. Для ответов с секретами, отражаемым вводом и TLS оцените риск BREACH отдельно. После выпуска выполните независимую проверку.