Не работает Вебвизор на сайте с «1С-Битрикс: Веб-окружением»
Почему Вебвизор Яндекс Метрики не показывает записи на сайте с bitrix-env: заголовок X-Frame-Options, защита от фреймов в Битриксе и как разрешить фреймы только Метрике.
Почему не работает
Вебвизор воспроизводит записи, открывая ваш сайт во фрейме на сайте Метрики. А «1С-Битрикс: Веб-окружение» по умолчанию запрещает показывать сайт во фреймах — это защита от кликджекинга, когда сайт подкладывают под чужую страницу, чтобы украсть клики, логины или данные карт. Запрет передаётся заголовком X-Frame-Options.
Значения заголовка
DENY— запретить показ во фреймах везде;SAMEORIGIN— разрешить только на своём же сайте;ALLOW-FROM домен— устаревшее значение, современные браузеры его не поддерживают.
Шаг 1. Защита от фреймов в Битриксе
В админке: Настройки → Проактивная защита → Защита от фреймов. Либо отключите её, либо добавьте сайт Метрики в исключения. Сканер безопасности после отключения покажет предупреждение — это ожидаемо, защиту мы перенесём в nginx.
Шаг 2. Разрешаем фреймы только Метрике в nginx
Закомментируйте общий заголовок в /etc/nginx/bx/conf/general-add_header.conf:
#add_header X-Frame-Options SAMEORIGIN;
И добавьте в конец /etc/nginx/bx/conf/bitrix_general.conf:
set $frame_options 'SAMEORIGIN';
if ($http_referer ~ '^https?://([^/]+\.)?(site\.ru|webvisor\.com|metrika\.yandex\.ru|metrica\.yandex\.com)/') {
set $frame_options '';
}
add_header X-Frame-Options $frame_options;
Замените site\.ru на свой домен. Для запросов из Метрики заголовок не отправляется, для всех остальных остаётся запрет.
nginx -t && systemctl restart nginx
Современная альтернатива
Вместо X-Frame-Options можно использовать заголовок Content-Security-Policy, который понимает список разрешённых сайтов без условий в nginx:
add_header Content-Security-Policy "frame-ancestors 'self' https://*.webvisor.com https://metrika.yandex.ru https://metrica.yandex.com" always;
Если используете CSP, уберите X-Frame-Options, чтобы два заголовка не противоречили друг другу.