Включите сжатие Brotli в NGINX
Сжимайте ваш контент на 15-25% лучше, чем gzip, с помощью алгоритма Brotli от Google.
-
15-25% меньше
Brotli достигает лучших коэффициентов сжатия, чем gzip для текстового контента
-
Универсальная поддержка
Все современные браузеры поддерживают Brotli (Chrome, Firefox, Safari, Edge)
-
Быстрее загрузка страниц
Меньшие файлы = более быстрые загрузки, особенно в мобильных сетях
-
Низкие затраты на трафик
Снижайте затраты на передачу данных с помощью лучшего сжатия
Поддержка браузеров
Brotli поддерживается более чем 95% браузеров по всему миру:
| Браузер | Поддержка Brotli |
|---|---|
| Chrome | ✅ С версии v50 (2016) |
| Firefox | ✅ С версии v44 (2016) |
| Safari | ✅ С версии v11 (2017) |
| Edge | ✅ С версии v15 (2017) |
| Opera | ✅ С версии v38 (2016) |
NGINX автоматически переходит на gzip для более старых браузеров.
Быстрая настройка
Шаг 1: Установите модуль Brotli
# Установите репозиторий GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
# Установите модуль Brotli
dnf -y install nginx-module-brotli
Включите в /etc/nginx/nginx.conf:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Шаг 2: Настройте сжатие Brotli
Создайте /etc/nginx/conf.d/brotli.conf:
# Включите сжатие Brotli
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types
text/plain
text/css
text/javascript
text/xml
application/javascript
application/json
application/xml
application/xml+rss
application/xhtml+xml
application/atom+xml
application/rss+xml
application/x-javascript
application/x-font-ttf
application/x-font-opentype
application/vnd.ms-fontobject
font/ttf
font/otf
font/opentype
font/woff
font/woff2
image/svg+xml
image/x-icon;
Перезагрузите NGINX:
nginx -t && systemctl reload nginx
Шаг 3: Убедитесь, что это работает
# Запрос с поддержкой Brotli
curl -sI -H 'Accept-Encoding: br' https://example.com | grep -i encoding
# Content-Encoding: br
# Сравните размеры
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: gzip' https://example.com
# 45678
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: br' https://example.com
# 38912 (меньше!)
Уровни сжатия
| Уровень | Скорость | Сжатие | Случай использования |
|---|---|---|---|
| 1-3 | Быстро | Ниже | Высокий трафик, ограниченные ресурсы ЦП |
| 4-6 | Сбалансировано | Хорошо | Большинство веб-сайтов (рекомендуется) |
| 7-9 | Медленнее | Лучше | Предварительно сжатые статические ресурсы |
| 10-11 | Очень медленно | Лучшее | Только для сжатия во время сборки |
Рекомендация
Используйте уровень 4-6 для динамического контента и уровень 11 для предварительно сжатых статических ресурсов.
Предварительно сжать статические ресурсы
Для максимальной производительности предварительно сжимайте файлы во время сборки:
# Установите инструмент командной строки Brotli
dnf -y install brotli
# Сожмите ваши статические файлы
find /var/www/html -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" -o -name "*.svg" \) \
-exec brotli -kf --best {} \;
Это создаст файлы .br рядом с оригиналами. NGINX автоматически обслуживает их с brotli_static on.
Сравнение размеров
Пример из реальной жизни (jQuery 3.6.0 в минифицированном виде):
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#009639', 'primaryTextColor': '#fff'}}}%%
pie showData
title Сравнение размеров файлов
"Оригинал (89KB)" : 89
"Gzip (31KB)" : 31
"Brotli (27KB)" : 27
| Формат | Размер | Экономия |
|---|---|---|
| Оригинал | 89 KB | — |
| Gzip | 31 KB | 65% |
| Brotli | 27 KB | 70% |
Расширенная конфигурация
Оставьте Gzip как резервный вариант
# Brotli (приоритет)
brotli on;
brotli_comp_level 6;
# Gzip (резервный вариант)
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/json;
Разные уровни для динамического и статического контента
# Динамический контент - быстрее сжатие
brotli on;
brotli_comp_level 4;
# Предварительно сжатые статические файлы - лучшее сжатие
brotli_static on;
Минимальный порог размера
# Не сжимать маленькие файлы (не имеет смысла)
brotli_min_length 256;
Устранение неполадок
Brotli не работает
-
Проверьте, что модуль загружен:
nginx -V 2>&1 | grep brotli -
Убедитесь, что запрос включает
Accept-Encoding: br -
Проверьте, что
Content-Typeвbrotli_types
Слишком высокая загрузка ЦП
Понизьте уровень сжатия:
brotli_comp_level 4; # или даже 2-3
Файлы не сжимаются
- Проверьте, что размер файла >
brotli_min_length - Убедитесь, что
Content-Typeсоответствуетbrotli_types - Проверьте, что соединение уже не сжато (CDN)
Связанные
-
Модуль Brotli
Полная справка по директивам
-
Модуль Unbrotli
Декомпрессия Brotli из бэкендов
-
Модуль PageSpeed
Дополнительный уровень оптимизации