Як налаштувати Varnish для Magento 2: VCL, ESI та інвалідація кеша

Вступ: чому Magento 2 без Varnish — вузьке місце

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Як налаштувати Varnish для Magento 2: VCL, ESI та інвалідація кеша
Складний
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1288
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    988
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1001

Вступ: чому Magento 2 без Varnish — вузьке місце

Magento 2 — важка CMS: кожна сторінка генерується динамічно через PHP-FPM та MySQL. При 500+ одночасних відвідувачах CPU йде в 100%, а час відгуку перевищує 5 секунд, що призводить до втрати конверсій. Varnish вирішує цю проблему: він кешує готові HTML-сторінки в оперативній пам'яті та віддає їх за мікросекунди. Середня економія на хостингу значна для проектів з 10 000+ замовленнями. З Varnish швидкість завантаження сторінки збільшується у 10-50 разів, а час відгуку сервера зменшується з 5 секунд до 0.03 секунди — у 167 разів швидше. На одному з проектів з каталогом 50 000 товарів hit rate виріс з 40% до 93% після налаштування VCL. Ми налаштовуємо Varnish під ваш проект з гарантованим hit rate 85-95%. Отримайте консультацію — оцінимо ваш проект за один день.

Як Varnish прискорює Magento 2?

Varnish зберігає кеш в оперативній пам'яті (-s malloc), що в 100 разів швидше за файловий або Redis-кеш. Навіть при повній інвалідації (масове оновлення цін) Varnish прогрівається за 1-2 хвилини завдяки grace (віддача застарілої копії) та saintmode (пропуск битого бекенда). Це критично для інтернет-магазинів з піковими навантаженнями: без Varnish сервер не витримує навіть 10% від запланованого трафіку.

Чому стандартний VCL потребує доопрацювання?

Magento генерує VCL через адмінку, але він не враховує:

  • передачу реального IP через X-Forwarded-For;
  • обробку BAN-запитів з патернами за тегами;
  • кешування для HTTP/HTTPS через заголовок Ssl-Offloaded;
  • нормалізацію URL (UTM-мітки, fbclid).

Типова помилка: не налаштований ACL для PURGE та BAN — інвалідація не працює, і зміни на сайті не відображаються. Наші інженери виправляють VCL під кожну задачу.

Як ми налаштовуємо Varnish: установка, VCL та ESI

Установка та базові параметри

# Установка на Ubuntu LTS (актуальна версія) curl -s https://packagecloud.io/install/repositories/varnishcache/varnish74/script.deb.sh | sudo bash apt install varnish # Файл сервісу (редагувати через systemctl edit varnish) ExecStart= ExecStart=/usr/sbin/varnishd \ -a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -s malloc,2g \ -p thread_pools=2 \ -p thread_pool_max=1000 \ -p thread_pool_timeout=300 

Розмір malloc — 2-4 GB для Magento. Менше 1 GB неефективно: сторінки важать 80–200 KB, і при малому кеші hit rate падає.

Ключові частини виправленого VCL

Код VCL (натисніть для розгортання)
vcl 4.1; import std; backend default { .host = "127.0.0.1"; .port = "8080"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; } acl purge { "localhost"; "127.0.0.1"; } sub vcl_recv { # Передаємо реальний IP if (req.restarts == 0) { if (req.http.X-Forwarded-For) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } # PURGE-запити від Magento if (req.method == "PURGE") { if (!client.ip ~ purge) { return (synth(405, "Not allowed")); } return (purge); } # BAN по X-Magento-Tags (інвалідація блоків) if (req.method == "BAN") { if (!client.ip ~ purge) { return (synth(405, "Not allowed")); } if (req.http.X-Magento-Tags-Pattern) { ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern); } return (synth(200, "Banned")); } # Не кешуємо checkout, cart, customer if (req.url ~ "/(checkout|customer|account|cart|wishlist)") { return (pass); } # Видаляємо куки на статиці if (req.url ~ "\.(css|js|png|jpg|jpeg|webp|gif|ico|woff2|svg)(\?.*)?$") { unset req.http.Cookie; return (hash); } # Чистимо UTM та інші мітки set req.url = regsuball(req.url, "(^|&)(utm_[a-z]+|gclid|gclsrc|fbclid)=[^&]*", ""); set req.url = regsub(req.url, "^(.*)\?&?(.*)?$", "\1?\2"); set req.url = regsub(req.url, "^(.*)\?$", "\1"); return (hash); } sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } if (req.http.Ssl-Offloaded) { hash_data(req.http.Ssl-Offloaded); } return (lookup); } sub vcl_backend_response { if (beresp.status >= 500) { set beresp.uncacheable = true; set beresp.ttl = 1s; return (deliver); } if (beresp.http.content-type ~ "text/html") { set beresp.ttl = 1d; set beresp.grace = 1h; } if (bereq.url ~ "\.(css|js|woff2)(\?.*)?$") { set beresp.ttl = 1y; } if (beresp.ttl > 0s) { unset beresp.http.Set-Cookie; } return (deliver); } sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; set resp.http.X-Cache-Hits = obj.hits; } else { set resp.http.X-Cache = "MISS"; } unset resp.http.X-Magento-Tags; unset resp.http.X-Powered-By; unset resp.http.Server; return (deliver); } 

ESI — динамічні блоки всередині кешованих сторінок

Magento використовує ESI для персоналізованих блоків (кошик, ім'я користувача). У VCL ESI вмикається через beresp.do_esi = true, який Magento встановлює заголовком X-Esi: 1. Перевірка:

curl -I https://myshop.ru/ | grep X-Cache # Очікується: HIT curl -I https://myshop.ru/checkout/cart/ | grep X-Cache # Очікується: MISS (кошик не кешується) 

Порівняння Varnish та вбудованого кеша Magento

Параметр Varnish Вбудований (файли/Redis)
Сховище RAM Файли або Redis
Швидкість віддачі мікросекунди мілісекунди
Інвалідація по X-Magento-Tags (BAN) по тегах (повний скид)
Hit rate 85-95% 70-80%
Grace/святий режим + -

Varnish швидший у 3-5 разів і дає на 15-20% вищий hit rate.

Типові помилки та їх вирішення

Проблема Ознака Рішення
Hit rate < 70% Багато MISS у логах Перевірити блокування куками, збільшити розмір malloc, видалити зайві cookie з кешованих запитів
Інвалідація не працює Після зміни товару сторінка стара Перевірити ACL для PURGE/BAN; переконатися, що BAN-запити доходять
ESI не оновлюється Кошик показує старі дані Перевірити, що VCL не видаляє заголовок X-Esi; ESI-блоки повинні бути тільки для динаміки

Процес роботи та строки

  1. Аудит поточної архітектури (VCL, Nginx, PHP-FPM).
  2. Установка та налаштування Varnish з оптимальним malloc та thread_pools.
  3. Адаптація VCL під Magento (ESI, BAN, grace).
  4. Налаштування SSL termination (Nginx/HAProxy) з передачею Ssl-Offloaded.
  5. Інтеграція з Magento: вибір Varnish в адмінці, ввімкнення FPC.
  6. Тестування hit rate (ціль 85-95%) та інвалідації.
  7. Документація та навчання базовим операціям (varnishadm, varnishlog).
  8. Підтримка 1 місяць після налаштування.

Строки: установка та базова конфігурація — 1-2 дні, тестування та оптимізація — 1 день, навантажувальне тестування — 0.5-1 дня.

Що входить в роботу

  • Повний аудит та підбір параметрів.
  • Установка, налаштування VCL, ESI, HTTPS.
  • Інтеграція з Magento та перевірка інвалідації.
  • Навчання команди.

Наші інженери мають 10+ років досвіду з Magento та Varnish, реалізували більше 50 проектів з піковими навантаженнями до 10 000 RPS. Гарантуємо hit rate 85-95% або доопрацьовуємо безкоштовно. Замовте налаштування Varnish для вашого Magento 2 — отримайте консультацію протягом 1 дня. Зв'яжіться з нами, щоб обговорити ваш проект.