Настройка Gzip/Brotli сжатия
Сжатие на транспортном уровне уменьшает размер HTML, CSS, JS в 3–10 раз. Brotli даёт на 15–25% лучшее сжатие чем Gzip при том же CPU. Настройка занимает 30 минут и не требует изменений кода.
Nginx: Gzip + Brotli
# /etc/nginx/nginx.conf или /etc/nginx/conf.d/compression.conf
# Gzip — поддерживается везде
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6; # 1-9, баланс CPU/сжатие; 6 — хорошая точка
gzip_min_length 256; # не сжимать очень маленькие файлы
gzip_types
application/javascript
application/json
application/xml
application/rss+xml
image/svg+xml
text/css
text/html
text/javascript
text/plain
text/xml
font/woff
font/woff2;
# Brotli — нужен модуль ngx_brotli
# Установка: apt install libnginx-mod-brotli
brotli on;
brotli_comp_level 6;
brotli_types
application/javascript
application/json
text/css
text/html
text/plain
image/svg+xml
font/woff2;
Проверка:
curl -H "Accept-Encoding: br" -I https://example.ru/
# Ответ должен содержать: Content-Encoding: br
curl -H "Accept-Encoding: gzip" -I https://example.ru/
# Ответ: Content-Encoding: gzip
Pre-compressed static assets
Для статических файлов (JS, CSS, бандлы) — генерировать .gz и .br файлы при сборке, отдавать напрямую. Нет расхода CPU при каждом запросе:
// vite.config.ts
import { defineConfig } from 'vite';
import viteCompression from 'vite-plugin-compression';
export default defineConfig({
plugins: [
viteCompression({ algorithm: 'gzip', ext: '.gz' }),
viteCompression({ algorithm: 'brotliCompress', ext: '.br' }),
]
});
# Nginx: отдавать pre-compressed файлы
location ~* \.(js|css|woff2)$ {
gzip_static on; # ищет .gz версию
brotli_static on; # ищет .br версию (модуль ngx_brotli)
expires 1y;
add_header Cache-Control "public, immutable";
}
Apache
# .htaccess
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
AddOutputFilterByType DEFLATE application/json image/svg+xml font/woff2
</IfModule>
Laravel: middleware для API
// По умолчанию Laravel не сжимает ответы
// Добавить middleware в bootstrap/app.php для API
->withMiddleware(function (Middleware $middleware) {
$middleware->api(append: [
\Illuminate\Http\Middleware\GzipResponse::class, // Laravel 11+
]);
})
Или через Nginx — предпочтительнее для производительности.
Типичные результаты сжатия
| Файл | Оригинал | Gzip | Brotli |
|---|---|---|---|
| app.js | 500 кБ | 150 кБ | 130 кБ |
| app.css | 80 кБ | 18 кБ | 15 кБ |
| HTML страница | 50 кБ | 12 кБ | 10 кБ |
Срок настройки: 30 минут для Nginx конфигурации.







