Налаштування Cloudflare кешування для 1С-Бітрікс
Стандартний Cloudflare-кеш без налаштування для Бітрікса марний або шкідливий: або кешує лише статику і не впливає на TTFB сторінок, або — при неправильних правилах — кешує сторінку кошика одного користувача і віддає її іншому. Правильне налаштування кешування Cloudflare для Бітрікс вимагає розуміння того, що можна кешувати на CDN, що — лише в браузері, а що не можна кешувати взагалі.
Що кешуємо на Cloudflare, що — ні
| Тип сторінок | Cloudflare Edge Cache | Браузерний кеш | Примітка |
|---|---|---|---|
| Головна, розділи каталогу, картки товарів | Так (5–60 хв) | Так (1–5 хв) | Публічний контент |
| Статичні файли (CSS, JS, зображення) | Так (1–30 днів) | Так | Fingerprinting через Vite/хеші |
| Сторінки пошуку, фільтра | Обережно | Ні | Залежить від параметрів |
| Кошик, особистий кабінет, оформлення замовлення | Ні (Bypass) | Ні | Персональні дані |
Admin /bitrix/admin/ |
Ні (Bypass) | Ні | |
API /bitrix/tools/, /local/api/ |
Ні (Bypass) | Ні |
Cache Rules (новий механізм, що замінює Page Rules)
У Cloudflare → Caching → Cache Rules налаштовуємо правила у правильному порядку (вони застосовуються зверху донизу, перше збіжне виграє).
Правило 1: Bypass для персональних сторінок (найвищий пріоритет):
Expression:
(http.request.uri.path contains "/personal/")
or (http.request.uri.path contains "/bitrix/admin/")
or (http.request.uri.path contains "/cart/")
or (http.request.uri.path contains "/order/")
or (http.request.uri.path contains "/bitrix/tools/")
or (http.cookie contains "BITRIX_SM_SALE_UID")
or (http.cookie contains "PHPSESSID" and http.request.uri.path contains "/checkout/")
Cache Status: Bypass
Правило 2: Довге кешування статики:
Expression:
(http.request.uri.path matches "^/upload/.*\.(jpg|jpeg|webp|png|gif|svg|ico)$")
or (http.request.uri.path matches "^/bitrix/cache/.*\.css$")
or (http.request.uri.path matches "^/bitrix/js/.*\.js$")
or (http.request.uri.path matches "^/local/templates/.*\.(css|js)$")
Edge TTL: 30 days
Browser TTL: 7 days
Cache Status: Cache everything
Правило 3: Кешування HTML-сторінок каталогу:
Expression:
(http.request.uri.path matches "^/catalog/")
and not (http.request.uri.path contains "/compare/")
and not (http.request.uri.query contains "sessid")
and not (http.cookie contains "BITRIX_SM_SALE_UID")
Edge TTL: 10 minutes
Browser TTL: 1 minute
Cache Status: Cache everything
Ключова умова: якщо в cookie є BITRIX_SM_SALE_UID (кошик не порожній) — не кешуємо. Інакше сторінка каталогу з кнопкою «Вже в кошику» буде віддаватися всім користувачам без винятку.
Кеш-ключ і Vary
За замовчуванням Cloudflare ігнорує Cookie при визначенні ключа кешу. Це небезпечно для Бітрікс. Потрібно явно включати в ключ кешу параметри, що впливають на контент:
- Заголовок
Accept-Language— для мультимовних сайтів - Cookie
BITRIX_SM_GUEST_IDпри необхідності персоналізації
У Cache Rules → Cache Key → Custom Cache Key:
Include: Accept-Language header
Exclude: Cookie (включаючи PHPSESSID, але перевіряйте BITRIX_SM_SALE_UID умовою вище)
Очищення при зміні контенту
Коли в Бітрікс змінюється товар або розділ — кеш Cloudflare має інвалідуватися. Два підходи:
Purge by Tag (Enterprise): Cloudflare підтримує теги кешу через заголовок Cache-Tag. Бітрікс додає тег до відповіді:
AddEventHandler('main', 'OnEndBufferContent', function(string &$content) {
$tags = implode(',', CloudflareCacheHelper::getCurrentPageTags());
header("Cache-Tag: {$tags}");
});
При зміні товару — purge за тегом product-123.
Purge by URL (усі тарифи): При збереженні елемента інфоблока надсилаємо запит на очищення:
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function(array &$arFields) {
$urls = IblockUrlHelper::getUrlsForElement($arFields['ID']);
CloudflareApi::purge([
'files' => $urls,
]);
});
class CloudflareApi
{
public static function purge(array $payload): void
{
$zoneId = CLOUDFLARE_ZONE_ID;
$token = CLOUDFLARE_API_TOKEN;
$ch = curl_init("https://api.cloudflare.com/client/v4/zones/{$zoneId}/purge_cache");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
"Authorization: Bearer {$token}",
],
]);
curl_exec($ch);
curl_close($ch);
}
}
Purge по URL — максимум 30 URL за запит. Для масових змін (імпорт прайсу) — purge по prefix або повне очищення зони.
Практична користь від Edge Cache
При правильному налаштуванні сторінки каталогу віддаються з Cloudflare edge за 20–50 мс замість 200–800 мс із сервера. Навантаження на PHP-FPM і базу даних при піках трафіку знижується в 5–20 разів — Cloudflare поглинає більшу частину запитів.
Склад робіт
- Cache Rules: bypass для персональних, кешування для публічних
- Кеш-ключ, Cookie conditions для кошика
- Очищення при зміні контенту через події інфоблока
- Налаштування довгого кешу для статики з fingerprinting
- Моніторинг hit-rate, аналіз помилкових байпасів
Терміни: 3–5 днів базове налаштування. 1–2 тижні з purge-інтеграцією та моніторингом hit-rate.







