Ускорить WordPress на VPS: gzip, Brotli и HTTP/2

Ускорить WordPress на VPS: gzip, Brotli и HTTP/2

WordPress на VPS часто медленный не из‑за одной причины, а из-за связки факторов: обработка PHP, время ответа сервера, размер HTML/CSS/JS и то, как эти файлы доставляются браузеру. Три настройки на стороне веб‑сервера обычно дают самый заметный эффект без переделки архитектуры: включение gzip, включение Brotli и настройка HTTP/2.

Ниже — практический план для nginx и Apache, а также способ проверить, что вы реально ускорили сайт, а не просто «включили галочки».

1) Быстрый аудит: что мерить перед настройками на VPS

Перед тем как включать gzip, Brotli и HTTP/2, стоит зафиксировать текущие показатели. Иначе вы не поймёте, что именно стало быстрее: сеть, сервер или рендер в браузере.

Сделайте так:

  • Откройте сайт в Chrome DevTools → вкладка Network → отсортируйте по Size и проверьте, есть ли сжатие: заголовок Content-Encoding (gzip или br).
  • Запустите тест производительности в Lighthouse (DevTools) или WebPageTest и сохраните скрин с метриками времени и размера ресурсов.
  • Проверьте, что это именно WordPress, а не просто тяжёлые темы/плагины: посмотрите, какие JS/CSS грузятся первыми и сколько весят.

Две типичные ловушки на старте:

  1. Плагин кэширования уже включает gzip/brotli, а вы дублируете настройки на сервере. Итог — конфликт и бессмысленная возня.
  2. HTTP/2 включают без корректной TLS-настройки. В результате часть клиентов может откатываться, а вы теряете ожидаемый выигрыш.

2) gzip для WordPress: как включить с nginx на VPS

gzip сжимает ответы сервера «на лету» и особенно полезен для текстовых форматов: HTML, CSS, JavaScript, SVG. WordPress отдаёт много таких файлов, поэтому gzip часто даёт заметное снижение трафика и ускорение загрузки.

Если у вас nginx на VPS, проверьте, что модуль gzip доступен (обычно он встроен). После этого добавьте настройки в конфиг. Удобнее всего править файл в разделе server или http (лучше целиться в конкретный site, чтобы не ломать остальные).

Пример конфигурации для nginx (фрагмент для server или http): «`nginx gzip on; gzipcomplevel 5; gzipminlength 1024; gzip_vary on; gzip_proxied any; gzip_types text/plain text/css text/javascript application/javascript application/json application/xml text/xml image/svg+xml application/rss+xml application/atom+xml application/vnd.ms-fontobject; «`

Несколько комментариев, которые экономят время:

  • gzip_types лучше не раздувать до «всего подряд». Сжимать уже сжатые форматы бессмысленно (например, некоторые медиа).
  • gzipminlength помогает не тратить CPU на очень маленькие ответы.
  • gzip_vary on добавляет заголовок Vary: Accept-Encoding — это важно для корректной работы кэшей (и браузеров).

Важно для WordPress: некоторые страницы могут быть закэшированы в reverse proxy или CDN. Заголовок Vary помогает кэшу хранить разные версии (сжатую/несжатую) и не отдавать «не тот» вариант.

3) Brotli для WordPress: почему он быстрее gzip и как включить

Brotli обычно эффективнее gzip по коэффициенту сжатия, особенно для HTML/CSS/JS. На практике это превращается в меньший вес ресурсов и чаще — в лучшую скорость загрузки на мобильных сетях или при высоких задержках.

Минус Brotli — требуется поддержка модуля. В nginx это чаще всего реализуют через модуль ngx_brotli (или аналогичную сборку). Проверьте, что модуль реально активен: иначе конфиг может быть принят, но сжатие не заработает.

Если у вас nginx с ngx_brotli, пример настроек: «`nginx brotli on; brotli_static off; brotlicomplevel 5; brotliminlength 1024; brotli_vary on; brotli_types text/plain text/css text/javascript application/javascript application/json application/xml text/xml image/svg+xml application/rss+xml application/atom+xml; «`

Что учесть:

  • brotlicomplevel влияет на баланс CPU и размера. Слишком высокий уровень может нагрузить процессор и ухудшить TTFB (время первого ответа).
  • brotliminlength — аналог gzipminlength: не сжимайте микроскопические ответы.
  • Если nginx поддерживает brotli_static, precompressed‑файлы могут дать ещё выигрыш, но это отдельная задача по сборке/хранению ассетов.

Про WordPress и динамику: Brotli чаще включают для динамических HTML, а также для статических CSS/JS, которые WordPress отдает напрямую из темы. На кэшированных страницах эффект обычно ещё заметнее: меньше трафика и быстрее скачивание.

4) Комбинация gzip и Brotli: как не получить лишнюю нагрузку

В одном и том же серверном блоке часто включают и gzip, и Brotli. Обычно браузер выбирает лучший алгоритм сам: если в Accept-Encoding есть br, то с высокой вероятностью будет отдан Brotli-контент. Но сервер должен корректно отдавать Content-Encoding и Vary, иначе кэши и некоторые клиенты начнут путаться.

Рекомендации, чтобы gzip и Brotli работали предсказуемо:

  • Оставьте gzipvary on и brotlivary on.
  • Используйте разумные границы по min_length.
  • Не включайте сжатие для всего подряд — держите список типов текстового контента.
  • Не добавляйте одинаковые правила из нескольких мест. Если и nginx, и плагин одновременно вмешиваются, итог будет трудно отлаживать.

Хорошая «рабочая» политика по умолчанию:

  • Brotli — как основной вариант, gzip — как резерв для клиентов без br.
  • Если у вас слабый VPS по CPU, начните с умеренных comp_level (примерно 4–6) и смотрите нагрузку.

Проверять лучше не «по ощущениям», а заголовками. Если на запрос с Accept-Encoding: br приходит Content-Encoding: br — значит Brotli реально работает.

5) HTTP/2 для WordPress на VPS: настройка на nginx и влияние на скорость

HTTP/2 ускоряет доставку за счёт мультиплексирования запросов по одному соединению и более эффективного использования сетевого канала. Особенно заметно это для страниц с множеством мелких ресурсов: CSS, JS, шрифты, иконки, изображения превью (если они грузятся в ранние фазы).

На nginx включение HTTP/2 обычно сводится к указанию http2 в listen на 443 и корректной TLS-настройке. Ключевой момент: HTTP/2 почти всегда включают поверх HTTPS, то есть нужен рабочий TLS.

Пример для nginx: «`nginx server { listen 443 ssl http2; server_name example.com;

ssl_certificate /path/fullchain.pem; sslcertificatekey /path/privkey.pem;

остальная настройка

} «`

Пара дополнительных практических советов:

  • Используйте TLS версии, которые nginx и браузеры поддерживают нормально (обычно это настройки по умолчанию для современных сборок). Не пытайтесь «оптимизировать безопасность», отключая лишнее — HTTP/2 вам нужен в первую очередь стабильно.
  • Проверьте, что не осталось старых директив, которые ломают совместимость (например, слишком агрессивные ограничения на ciphers, если вы их меняли вручную).

Для Apache логика похожая: включается модуль mod_http2 и конфигурация виртуального хоста. Но реализация зависит от версии и сборки, поэтому конфиг лучше брать из документации вашей сборки. Если вы настраиваете сервер «вручную», проще ориентироваться на nginx, где включение HTTP/2 часто предельно прямое.

6) Порядок внедрения: что делать сначала, чтобы получить максимум результата

Если ваша цель — ускорить WordPress на VPS именно за счёт сети и доставки контента, порядок имеет значение.

Рекомендованный план:

  1. Убедитесь, что HTTP/2 работает поверх HTTPS (проверьте, что сайт реально отвечает по HTTP/2).
  2. Включите Brotli, но с умеренными настройками и понятным списком типов.
  3. Добавьте gzip как fallback для клиентов без br.
  4. Проверьте, что кэш и заголовки корректны (Vary, Content-Encoding).
  5. После этого — оцените метрики TTFB и скорость загрузки в браузере. Если CPU вырос слишком сильно, уменьшайте comp_level.

Зачем так:

  • HTTP/2 — это транспортная часть. Если она не работает, вы можете получить только частичный эффект от сжатия.
  • Brotli даёт сильное сжатие, но может увеличить нагрузку на CPU, особенно на динамике без кэша. Поэтому его лучше включать с настройкой «без перегиба».

7) Как проверить, что gzip, Brotli и HTTP/2 реально включены

Проверка занимает минуту и экономит часы дебага.

Проверка Brotli:

  • Запросите сайт так, чтобы браузер мог попросить br.
  • Если сервер отдаёт Content-Encoding: br — Brotli включён и применяется.

Команда (пример с curl): «`bash curl -I -s -H «Accept-Encoding: br» https://example.com/ | grep -i content-encoding «`

Проверка gzip: «`bash curl -I -s -H «Accept-Encoding: gzip» https://example.com/ | grep -i content-encoding «`

Проверка HTTP/2:

  • Посмотрите, какой протокол используется при соединении.
  • Проще всего — через инструменты разработчика в браузере (Network → Headers) или проверку соединения через curl (если доступно в вашей версии).

Например, curl часто показывает протокол в выводе при соответствующих флагах, но зависимости от версии отличаются. Если инструментов командной строки недостаточно, Chrome DevTools обычно надёжнее: вы увидите, что запросы идут по h2.

Ещё одна проверка, которая полезна для кэшей:

  • Посмотрите заголовок Vary.
  • Для сжатия корректный вариант — чтобы кэш различал Accept-Encoding.

В DevTools откройте любой запрос к HTML/CSS/JS и найдите Vary: Accept-Encoding. Если его нет, это не всегда означает поломку, но это один из самых частых источников «то работает, то нет».

8) Типичные ошибки при включении gzip/Brotli/HTTP2 на VPS

Здесь перечислю проблемы, которые встречаются чаще всего. Они не «теоретические», а реальные причины, почему скорость не улучшилась.

  1. Дублирование сжатия из плагина и сервера

Некоторые плагины добавляют свои заголовки и правила. В итоге вы получаете непредсказуемый набор Content-Encoding или лишнюю нагрузку. Решение простое: выбрать один источник истины — сервер или плагин.

  1. Сжатие включено, но не для нужных типов

Если список gziptypes или brotlitypes слишком узкий, сжатие применяется не к тем файлам, которые грузятся на первой странице. В WordPress чаще всего важны text/html, text/css, application/javascript, application/json.

  1. Динамические ответы сжимаются слишком тяжело

Brotli complevel по умолчанию может быть «достаточно» для теста, но на реальной нагрузке VPS проседает. Симптом: растёт TTFB, а в метриках скорость страницы не улучшается или ухудшается. Решение: снизить complevel и включить умеренные min_length.

  1. HTTP/2 работает не для всех клиентов

Если HTTPS настроен неправильно или редиректы конфликтуют, часть запросов идёт по HTTP/1.1. Симптом — в DevTools вы видите mix протоколов. Решение: проверить редиректы на 80→443 и точность конфигурации server_name.

  1. В кэше отдаётся не тот вариант контента

Без Vary: Accept-Encoding некоторые кэши могут хранить одну версию и отдавать её всем. Это приводит к странным эффектам: у части пользователей может приходить Content-Encoding, который браузер не ожидает, или наоборот. Решение — оставить Vary и проверить, где именно кэшируется контент (nginx, proxy, CDN).

9) Что ещё ускоряет WordPress на VPS вместе с gzip/Brotli/HTTP/2

Сжатие и HTTP/2 чаще всего уменьшают время загрузки «на проводе», но остаются серверные задержки. Если вы хотите, чтобы улучшения были стабильными, полезно закрыть несколько системных дыр.

Кэш на стороне сервера и OPcache:

  • Настройте кэширование страниц/фрагментов там, где это уместно (полностью или частично).
  • В PHP включите OPcache и проверьте, что он активен. Это снижает время выполнения PHP и уменьшает TTFB.

Оптимизация базы и запросов:

  • Медленные плагины и тяжёлые запросы тянут сервер даже при отличном сжатии.
  • На уровне WordPress помогает удаление неиспользуемых плагинов, пересмотр тяжёлых запросов в админских процессах и корректная индексация.

HTTP-заголовки и кеширование статики:

  • Дайте правильные Cache-Control и Expires для статики (CSS/JS/шрифты/изображения), чтобы браузер не делал лишних повторных загрузок.
  • Следите, чтобы версии файлов менялись при деплое (через querystring или хэш в имени), иначе вы получите кеш-устаревание.

С мыслью о gzip/Brotli:

  • CDN часто отдаёт сжатие на своём уровне. Тогда ваши настройки на VPS могут быть не нужны или частично дублируются. Если используете CDN, проверьте, где именно происходит компрессия: на CDN или на origin.

10) Пошаговый чеклист внедрения для WordPress на VPS

Чтобы не потеряться в настройках, используйте следующий порядок.

  • Зафиксируйте базу
  • Запишите текущие метрики (Lighthouse/WebPageTest).
  • Убедитесь через DevTools, что Content-Encoding отсутствует или отличается от ожидаемого.
  • Включите HTTPS и HTTP/2
  • Настройте listen 443 ssl http2 в nginx (или mod_http2 в Apache).
  • Проверьте в DevTools, что запросы идут по h2.
  • Включите Brotli
  • Добавьте brotli on и настройте comp_level и списки типов.
  • Убедитесь, что модуль реально работает и не «молчит».
  • Добавьте gzip как fallback
  • Включите gzip с gzip_types.
  • Оставьте Vary: Accept-Encoding и адекватные min_length.
  • Проверьте заголовки
  • curl с Accept-Encoding: br и gzip.
  • В DevTools проверьте Vary, Content-Encoding и корректность ответов.
  • Оцените влияние на сервер
  • Посмотрите нагрузку CPU после включения сжатия.
  • Если растёт TTFB или CPU упирается, уменьшите brotlicomplevel и gzipcomplevel, пересмотрите списки типов.
  • Повторите замеры скорости
  • Сравните до/после на тех же страницах и сценариях.
  • Смотрите не только на общий score, но и на время загрузки критического контента.

Заключение: когда gzip, Brotli и HTTP/2 дают заметный прирост

gzip, Brotli и HTTP/2 ускоряют WordPress на VPS там, где сайт больше всего «платит»: передача текстовых ресурсов и эффективность сетевого транспорта. Успех обычно зависит не от одной кнопки, а от трёх вещей сразу: корректных заголовков (Content-Encoding и Vary), реальной поддержки Brotli на вашем nginx и проверенного HTTP/2 поверх HTTPS.

Начните с проверки текущего состояния, затем включите HTTP/2, после него — Brotli и gzip, и только после этого сравните метрики до/после. Если всё сделано правильно, вы получите более быстрый рендер из-за меньшего веса файлов и более эффективную доставку ресурсов при множественных запросах — без переписывания WordPress и темы.