Настройка 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 условием выше)
Purge при изменении контента
Когда в Битрикс меняется товар или раздел — кеш 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 для корзины
- Purge при изменении контента через события инфоблока
- Настройка долгого кеша для статики с fingerprinting
- Мониторинг hit-rate, анализ ложных байпасов
Сроки: 3–5 дней базовая настройка. 1–2 недели с purge-интеграцией и мониторингом hit-rate.







