Загрузка...
Загрузка...
Полное руководство по настройке Brotli сжатия на веб-серверах: Nginx, Apache, сравнение с Gzip, уровни сжатия и проверка работы.
Правила безопасности в .htaccess: блокировка ботов, защита от хотлинкинга, ограничение доступа, защита чувствительных файлов, rate limiting.
БезопасностьСравнение HTTP/2 и HTTP/3: мультиплексирование, QUIC, настройка серверов. Практическое руководство по ускорению сайта с современными протоколами.
БезопасностьПошаговое руководство по установке бесплатных SSL-сертификатов Let's Encrypt на Apache и Nginx. Certbot, автообновление, wildcard. Практический гайд для веб-мастеров.
DevOpsТюнинг производительности Nginx: worker processes, gzip/brotli, кэширование, буферы, keepalive, rate limiting, балансировка нагрузки.
Поделитесь с коллегами или изучите другие материалы блога
Brotli — алгоритм сжатия от Google, дающий на 15–25% лучшую степень сжатия, чем Gzip, при сопоставимой скорости. В статье — настройка Brotli для Nginx и Apache, сравнение с Gzip и проверка работы.
Проверить поддержку Brotli на сайте можно через HTTP/2 Checker. Для генерации конфигурации Nginx используйте Nginx Generator на rechecker.ru.
| Параметр | Gzip | Brotli |
|---|---|---|
| Степень сжатия | Базовая | На 15–25% лучше |
| Скорость сжатия | Быстрее | Сопоставима на уровнях 1–5 |
| Уровни сжатия | 1–9 | 0–11 |
| Поддержка браузеров | 100% | 97%+ |
| Статическое сжатие | Да | Да (предварительно) |
| Динамическое сжатие | Да | Да |
Brotli особенно эффективен для текстовых ресурсов: HTML, CSS, JavaScript, JSON, SVG.
| Уровень | Степень сжатия | CPU | Рекомендация |
|---|---|---|---|
| 0–3 | Низкая | Минимально | Динамическое сжатие |
| 4–6 | Средняя | Умеренно | Баланс |
| 7–11 | Высокая | Высоко | Только статическое |
Для динамического сжатия обычно используют уровень 4–5. Для статики — 9–11.
Nginx не включает Brotli по умолчанию. Варианты:
Ubuntu/Debian (пакет):
apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static
Сборка из исходников:
git clone https://github.com/google/ngx_brotli
cd ngx_brotli
git submodule update --init
# При сборке Nginx: --add-module=/path/to/ngx_brotli
# Загрузка модулей (если отдельные .so)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
http {
# Brotli для динамического сжатия
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/json application/javascript
application/x-javascript text/xml application/xml application/xml+rss
text/javascript image/svg+xml;
# Brotli для статических файлов (если есть .br)
brotli_static on;
server {
listen 443 ssl http2;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
# Статические ресурсы с предварительным сжатием
location ~* \.(js|css|svg|json)$ {
brotli_static on;
add_header Cache-Control "public, max-age=31536000";
}
}
}
| Директива | Значение по умолчанию | Описание |
|---|---|---|
brotli | off | Включить/выключить |
brotli_comp_level | 6 | Уровень сжатия |
brotli_types | text/html | MIME-типы для сжатия |
brotli_min_length | 20 | Минимальный размер (байта) |
brotli_static | off | Использовать .br файлы |
brotli_buffers | 32 4k | Буферы |
# Ubuntu/Debian
apt install libapache2-mod-brotli
a2enmod brotli
systemctl restart apache2
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css
AddOutputFilterByType BROTLI_COMPRESS application/javascript application/json
AddOutputFilterByType BROTLI_COMPRESS application/xml image/svg+xml
BrotliCompressionLevel 5
BrotliWindowSize 22
</IfModule>
Для максимальной степени сжатия сжимайте файлы на этапе сборки:
# Установка brotli CLI
apt install brotli # или npm install -g brotli
# Сжатие с уровнем 11
brotli -k -q 11 style.css -o style.css.br
brotli -k -q 11 app.js -o app.js.br
Nginx с brotli_static on будет отдавать .br файлы, если клиент поддерживает Brotli и запрашивает соответствующий URL.
curl -H "Accept-Encoding: br" -I https://example.com/style.css
Ожидаемый заголовок: Content-Encoding: br
# Без сжатия
curl -s -o /dev/null -w "%{size_download}" https://example.com/style.css
# С Brotli
curl -s -H "Accept-Encoding: br" -o /dev/null -w "%{size_download}" https://example.com/style.css
HTTP/2 Checker на rechecker.ru проверяет поддержку Brotli и HTTP/2 для любого домена. Nginx Generator помогает сгенерировать конфигурацию с включённым Brotli.
Рекомендуемая конфигурация — поддержка обоих алгоритмов:
# Gzip как fallback
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript;
# Brotli с приоритетом
brotli on;
brotli_types text/plain text/css application/json application/javascript;
Сервер проверяет заголовок Accept-Encoding и отдаёт Brotli, если клиент его поддерживает (br в заголовке), иначе — Gzip (gzip).
| Ресурс | Без сжатия | Gzip | Brotli |
|---|---|---|---|
| HTML 50 KB | 50 KB | 12 KB | 10 KB |
| CSS 100 KB | 100 KB | 18 KB | 14 KB |
| JS 200 KB | 200 KB | 55 KB | 42 KB |
Экономия трафика напрямую влияет на LCP и FCP — меньше данных означает быстрее загрузку.
Brotli — простой способ уменьшить трафик на 15–25% без изменения кода. Проверьте текущую настройку через HTTP/2 Checker и при необходимости используйте Nginx Generator для генерации конфигурации.