Как ускорить сайт на VPS: кэш, gzip, CDN
Медленный сайт теряет посетителей и позиции в поиске. Хорошая новость: на собственном VPS вы управляете всем стеком и можете выжать максимум. Разберём кэширование, сжатие, HTTP/2 и CDN — с конфигами, которые можно копировать.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →С чего начать: измеряем, а не гадаем
Прежде чем что-то оптимизировать, замерьте текущую скорость. Простейший способ — curl с выводом таймингов.
curl -o /dev/null -s -w "connect: %{time_connect}s\nttfb: %{time_starttransfer}s\ntotal: %{time_total}s\n" https://ваш-домен.ru/
TTFB (time to first byte) выше 400 мс — сигнал, что тормозит backend или диск. На тарифах MAATRIX стоят AMD EPYC + NVMe, поэтому дисковый I/O почти никогда не становится узким местом, и разница видна сразу после переезда с медленного диска.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать быстрый VPS для сайтаСжатие: gzip и brotli
Текстовые ответы (HTML, CSS, JS, JSON) сжимаются в 3-5 раз. В nginx включаем gzip в /etc/nginx/nginx.conf внутри блока http:
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
gzip_vary on;
Brotli сжимает ещё плотнее. Ставим модуль и включаем параллельно gzip:
apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static -y
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/json application/javascript image/svg+xml;
Проверяем, что сжатие работает:
curl -H "Accept-Encoding: gzip" -I https://ваш-домен.ru/ | grep -i content-encoding
HTTP/2 и keepalive
HTTP/2 мультиплексирует запросы в одном соединении — критично для сайтов с десятками ресурсов. Включается одним словом в директиве listen:
listen 443 ssl http2;
Держим соединения открытыми, чтобы не тратить время на новый TLS-хендшейк:
keepalive_timeout 65;
keepalive_requests 1000;
После правок обязательно проверяем синтаксис и перечитываем конфиг без обрыва соединений:
nginx -t && systemctl reload nginx
Кэш статики и микрокэш страниц
Браузерный кэш снимает нагрузку на повторных заходах. Для статики выставляем длинный срок жизни:
location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff2|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
Для динамики (WordPress, интернет-магазин) помогает микрокэш на 1-10 секунд — он гасит пики трафика, почти не отдавая устаревшего контента:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=micro:10m max_size=500m inactive=10m;
fastcgi_cache micro;
fastcgi_cache_valid 200 5s;
fastcgi_cache_use_stale error timeout updating;
OPcache для PHP и CDN для статики
Если сайт на PHP (WordPress, Joomla, OpenCart), включите OPcache — он кэширует скомпилированный байткод и ускоряет отклик в разы. В /etc/php/8.2/fpm/conf.d/10-opcache.ini:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
systemctl restart php8.2-fpm
CDN раздаёт статику с ближайшего к пользователю узла. Достаточно вынести картинки и скрипты на поддомен и направить его через Cloudflare или BunnyCDN. Сам сайт при этом остаётся на вашем VPS — CDN лишь берёт на себя раздачу тяжёлых файлов.
- Итог: сжатие + HTTP/2 + кэш дают ускорение в 2-4 раза без смены кода.
- Быстрый диск на MAATRIX убирает главный тормоз — ожидание чтения с диска на старте PHP.
Частые ошибки и проверка результата
Первая типовая ошибка — забыть перечитать конфиг nginx после правок. Директивы не применяются, пока вы не выполнили reload, а сама проверка синтаксиса ничего не активирует. Возьмите за правило: любая правка заканчивается связкой nginx -t и systemctl reload nginx.
Вторая ошибка — кэшировать динамические страницы вместе с корзиной и личным кабинетом. Микрокэш и fastcgi_cache применяйте только к анонимным GET-запросам, а всё, что зависит от пользователя, исключайте по cookie.
Третья ошибка — сжимать уже сжатое. Не добавляйте в gzip_types форматы вроде jpg, png или woff2: они уже упакованы, и повторное сжатие только тратит процессор без выигрыша.
После всех настроек повторно замерьте TTFB тем же curl-запросом, что и в начале, и сравните заголовки ответа — должны появиться Content-Encoding, Cache-Control и HTTP/2. Если TTFB упрямо высокий даже с кэшем, узкое место в backend или в медленном диске — здесь и помогает переезд на NVMe-план MAATRIX, где чтение файлов перестаёт тормозить старт PHP.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать быстрый VPS для сайтаОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Что важнее: gzip или CDN?
Начните со сжатия и кэша — это бесплатно и делается за 10 минут. CDN добавляйте, когда аудитория географически разбросана или много тяжёлой статики.
Не сломает ли микрокэш корзину магазина?
Нет, если исключить из кэша страницы с корзиной и личным кабинетом через условие по cookie. Кэшируем только анонимные GET-запросы.
Поможет ли переезд на быстрый VPS?
Да, если сейчас диск HDD или перегруженный shared-хостинг. NVMe у MAATRIX снижает TTFB особенно на PHP-сайтах, где много обращений к файлам.