Настройка Cloudflare кеширования для 1С-Битрикс
Стандартный Cloudflare-кеш без настройки для Битрикса бесполезен или вреден. Он либо кеширует только статику и не влияет на TTFB страниц, либо — при неправильных правилах — кеширует страницу корзины одного пользователя и отдаёт её другому. Мы, инженеры с 10+ лет опыта в Битрикс, решили сотни подобных задач. Настройка под ключ ускорит ваш сайт в 5 раз и снизит нагрузку на сервер. Гарантируем корректную работу кеша без конфликтов с корзиной.
Почему стандартный Cloudflare-кеш не работает с Битрикс?
Cloudflare по умолчанию кеширует статику и HTML по простым правилам. Но Битрикс использует сессии и куки для персонализации: корзина, личный кабинет, избранное. Если кешировать HTML-страницу каталога без учёта состояния корзины, пользователи увидят чужие данные. Кроме того, админ-панель и API никогда не должны кешироваться. Поэтому нужны тонкие настройки Cache Rules и кеш-ключа.
Что кешируем на 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 для Битрикс
В 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-страниц каталога: – здесь важно условие по Cookie: если в cookie есть BITRIX_SM_SALE_UID (корзина не пустая), страницу не кешируем. Иначе страница каталога с кнопкой «Уже в корзине» будет отдаваться всем пользователям без исключения. Установите Edge TTL 10 минут, Browser TTL 1 минуту, режим Cache everything.
Кеш-ключ и 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 (Configure Cache Key) объясняется, что кеш-ключ определяет, для каких вариантов контента хранить копию. Для мультиязычного сайта обязательно включать Accept-Language, чтобы языковые версии хранились отдельно. Если у вас есть персонализация по городу через cookie, можно включить её в ключ, но осторожно — это снизит hit-rate.
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 или полную очистку зоны.
Сравнение методов очистки кеша
| Метод | Требования | Скорость | Когда использовать |
|---|---|---|---|
| Purge by Tag | Enterprise-тариф | Мгновенно | При изменении единичного товара |
| Purge by URL | Любой тариф | До 30 URL/запрос | При обновлении нескольких страниц |
| Purge by prefix | Любой тариф | Зависит от объёма | При массовых изменениях (импорт) |
| Purge everything | Любой тариф | Быстро | Для полной очистки (редко) |
Как убедиться, что кеш Cloudflare срабатывает?
Проверьте заголовок CF-Cache-Status в ответе сервера. Если статус HIT — страница отдаётся из кеша, сервер не нагружается. Если MISS или DYNAMIC — кеш не сработал, проверьте правила Cache Rules. Используйте curl с указанием куки, чтобы имитировать пользователя без корзины: curl -I -H "Cookie: " https://your-site.ru/catalog/. При правильной настройке вы увидите CF-Cache-Status: HIT и TTFB около 50 мс.
Польза от Edge Cache на практике
При правильной настройке страницы каталога отдаются из Cloudflare edge за 20–50 мс вместо 200–800 мс с сервера — в 5 раз быстрее. Нагрузка на PHP-FPM и базу данных при пиках трафика снижается в 5–20 раз, Cloudflare поглощает большую часть запросов. Экономия на серверных мощностях может быть существенной, а hit-rate кеша достигает 95%. Это позволяет выдерживать всплески посещаемости без дополнительных вложений.
Что входит в работу: пошаговый план
- Аудит текущей скорости и кеширования (GTmetrix, PageSpeed).
- Настройка Cache Rules: bypass для персональных, кеширование для публичных.
- Конфигурация кеш-ключа и Cookie-условий для корзины.
- Разработка purge-интеграции через события инфоблоков.
- Настройка долгого кеша для статики с fingerprinting.
- Мониторинг hit-rate и анализ ложных байпасов.
- Документация по правилам и инструкция для поддержки.
Сроки и стоимость
Базовая настройка занимает 3–5 дней, полный цикл с purge-интеграцией и мониторингом — 1–2 недели. Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами для точной оценки. Закажите консультацию — оценим проект и предложим решение под ваш бюджет.







