VPS для WooCommerce: оптимизация магазина
WooCommerce мощный, но тяжёлый: корзина, сессии и фильтры каталога грузят базу и PHP. На своём VPS вы можете подкрутить каждый слой. Разберём Redis, тюнинг MariaDB и PHP-FPM и умное кэширование, которое не ломает корзину.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему WooCommerce тормозит
Проблема не в движке, а в динамике: каждая страница корзины и оформления не кэшируется и бьёт по базе. Плюс WordPress хранит опции и сессии в MySQL. Решение — вынести кэш объектов в память и разгрузить диск.
На тарифах MAATRIX связка AMD EPYC + NVMe уже снимает главный тормоз медленных магазинов — дисковые операции при чтении опций и мета-полей товаров идут быстро.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для WooCommerceRedis object cache
Redis кэширует результаты запросов к базе прямо в оперативке. Ставим сервер и PHP-расширение:
apt install redis-server php-redis -y
systemctl enable --now redis-server
systemctl restart php8.2-fpm
Ограничиваем память Redis и включаем вытеснение старых ключей в /etc/redis/redis.conf:
maxmemory 256mb
maxmemory-policy allkeys-lru
systemctl restart redis-server
В админке WordPress ставим плагин Redis Object Cache и жмём Enable — или включаем через WP-CLI:
wp plugin install redis-cache --activate
wp redis enable
Тюнинг MariaDB
Магазину нужен буфер InnoDB побольше, чтобы горячие данные каталога жили в памяти. Создаём /etc/mysql/mariadb.conf.d/99-tuning.cnf:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
max_connections = 150
query_cache_type = 0
systemctl restart mariadb
Значение buffer_pool ставьте примерно в половину доступной RAM. Query cache в MariaDB для WooCommerce лучше выключить — он чаще мешает, чем помогает.
Настройка PHP-FPM под нагрузку
Дефолтные лимиты PHP-FPM малы для магазина. Правим пул в /etc/php/8.2/fpm/pool.d/www.conf:
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500
И поднимаем лимиты памяти и времени в php.ini для тяжёлых операций импорта:
memory_limit = 256M
max_execution_time = 120
upload_max_filesize = 64M
systemctl restart php8.2-fpm
Кэш страниц без поломки корзины
Кэшировать можно только анонимные страницы. Исключаем корзину, оформление и залогиненных пользователей по cookie в конфиге nginx:
set $skip_cache 0;
if ($request_uri ~* "/cart|/checkout|/my-account|/wp-admin") { set $skip_cache 1; }
if ($http_cookie ~* "woocommerce_items_in_cart|wordpress_logged_in") { set $skip_cache 1; }
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
nginx -t && systemctl reload nginx
- Проверьте, что при добавлении товара в корзину страница перестаёт кэшироваться (заголовок X-Cache: BYPASS).
- Redis + тюнинг базы легко ускоряют магазин в 2-3 раза без смены темы.
Мониторинг и частые ошибки
После оптимизации важно понимать, что реально происходит на сервере. Посмотрите загрузку в реальном времени — процессор, память и активные процессы:
apt install htop -y && htop
Проверьте, что Redis действительно принимает запросы и растёт число попаданий в кэш:
redis-cli info stats | grep keyspace
Типичная ошибка магазинов — оставить в WooCommerce неограниченное хранение сессий и логов, из-за чего таблица wp_options и постмета разрастаются на гигабайты. Регулярно чистите транзиенты через WP-CLI:
wp transient delete --all
wp db optimize
Вторая частая проблема — тяжёлые фильтры каталога, которые делают полный перебор таблиц. Здесь спасает индекс в базе и достаточный буфер InnoDB из прошлого раздела. И помните: сколько бы вы ни кэшировали, при реально высоком трафике упирается всё в железо — на AMD EPYC + NVMe у MAATRIX магазин держит наплыв покупателей в распродажу, где слабый shared-хостинг просто ложится.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для WooCommerceОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Redis или Memcached для WooCommerce?
Redis предпочтительнее: он персистентный, поддерживает больше типов данных и лучше интегрирован с популярным плагином object cache. Разница в скорости для WooCommerce минимальна.
Сколько RAM нужно магазину на WooCommerce?
От 4 ГБ для комфортной работы: 1 ГБ под InnoDB, память под PHP-воркеры и Redis. При росте каталога и трафика — 8 ГБ. На MAATRIX план масштабируется без переезда.
Не будет ли Redis отдавать устаревшие цены?
Нет: object cache инвалидируется при изменении товара. Кэшируется результат запроса, а не сама страница, и WooCommerce корректно сбрасывает ключи при обновлении.