CDN изображений и видео — zorka.cdn
zorka.cdn — отдельный модуль для «1С-Битрикс: Управление сайтом», версия 0.2.0. Он размещён в этом разделе документации рядом с zorka.chat, но не входит в модуль чата и не нужен для его работы.
Модуль заменяет домен изображений в готовой HTML-странице на выбранный CDN. Например:
/upload/product.jpg?v=4
→ https://by.cdn.zorka.cloud/upload/product.jpg?v=4
Путь, параметры и якорь сохраняются. Исходные файлы, шаблоны и записи в базе не меняются. Получение файлов с сайта и их сжатие выполняет CDN, а не модуль Bitrix.
Установка
Требуются коробочная «1С-Битрикс: Управление сайтом», PHP 8.1+ и UTF-8. Модуль проверен с PHP 8.3 и ядром main 26.150.0; требования вашей версии самого Bitrix также должны выполняться. Для установки нужен администратор.
- В административной панели Битрикса откройте Marketplace → Каталог решений и найдите zorka.cdn.
- Установите модуль через Битрикс Маркет и пройдите мастер установки.
- Проверьте наличие zorka.cdn в разделе Marketplace → Установленные решения.
- Откройте настройки модуля:
/bitrix/admin/settings.php?lang=ru&mid=zorka.cdn. - Выберите сайт, проверьте адреса, форматы и исключения. После новой установки подмена выключена.
- Убедитесь, что изображение доступно через выбранный CDN по HTTPS, затем включите подмену. При использовании композитного кеша очистите кеш HTML-страниц.
CDN должен отдавать изображения по тем же путям, что и ваш сайт. DNS, TLS и доступ CDN к исходным файлам настраиваются отдельно. Для изображений модуль не загружает файлы в CDN. Видео отправляется отдельным фоновым обработчиком; создание CDN-ресурса и DNS/TLS остаются отдельной настройкой.
Регион для каждого сайта
| Регион | Адрес по умолчанию |
|---|---|
| Беларусь, BY | https://by.cdn.zorka.cloud |
| Европа, EU | https://eu.cdn.zorka.cloud |
| Россия, RU | https://ru.cdn.zorka.cloud |
Выбор выполняется вручную в настройках сайта. Все посетители выбранного сайта получают изображения с этого адреса. Настройки сайтов независимы. Автоматического выбора по стране посетителя и переключения при отказе нет.
Адреса трёх регионов можно изменить. Указывайте полный HTTPS-адрес без пути, логина и параметров. Наличие региона в форме не означает, что CDN для него уже подключён.
Остальные настройки
Форматы изображений. По умолчанию: jpg jpeg png webp avif bmp. BMP конвертируется CDN. При обновлении уже установленного модуля добавьте bmp в настройках сайта: сохранённые списки не заменяются автоматически. SVG/ICO/TIFF требуют отдельной поддержки выбранного CDN. Анимированный GIF обрабатывается через видео API — не добавляйте его в список изображений для ImgTune.
Дополнительные домены сайта. По одному домену на строку, без https:// и пути. Текущий домен учитывается автоматически. Например, можно добавить второе имя своего сайта с www. Изображения с чужих доменов не перенаправляются на ваш CDN.
Исключённые пути. Префиксы, по одному на строку, например /upload/private/. Всегда исключены /bitrix/admin/, /bitrix/tools/, /personal/ и /upload/private/. Дополните список всеми закрытыми каталогами проекта: по URL модуль не может определить права пользователя на файл. Изображения, требующие авторизации, должны оставаться вне публичного CDN-кеша.
Какие изображения обрабатываются
- Обычные изображения
img src, адаптивныеsrcsetиpicture. - Типовые lazy-load атрибуты:
data-src,data-original,data-lazy-src,data-srcsetи атрибуты фона. - Фоновые изображения в атрибуте
styleи блокеstyleна странице. - Постеры видео, ссылки на изображения, preload, метаданные изображений для соцсетей, SVG-ссылки — при разрешённом формате.
- Изображения из кеша ресайза Bitrix, когда их адрес присутствует в HTML.
Относительные и абсолютные адреса своего сайта поддерживаются. Уже подставленный адрес выбранного CDN не меняется повторно. data:, blob:, якоря и PHP-обработчики изображений сохраняются.
Что требует отдельной интеграции
Модуль 0.2.0 не заменяет все возможные способы загрузки изображений:
- Внешние CSS-файлы не переписываются. Адреса фонов внутри них нужно адаптировать в шаблоне или сборке CSS.
- JavaScript и JSON не изменяются. Lazy-load работает, если библиотека использует уже переписанный атрибут; адреса, созданные скриптом позже, требуют изменения компонента.
- Страницы с тегом
baseпропускаются целиком. URL без расширения, нестандартные lazy-load атрибуты и специальные CSS-конструкции требуют адаптера. - Почта, экспорт, мобильные приложения и композитные AJAX-вставки не считаются проверенными автоматически.
Если CDN недоступен, автоматического возврата к origin нет. Выключите подмену и очистите композитный HTML-кеш. Для выбора региона/настройки URL у модуля нет зависимости от геолокационных сервисов.
Проверка на тестовой галерее
Подготовлен набор из 9 технических изображений в 7 форматах, около 68 МиБ оригиналов: JPEG, PNG, WebP, AVIF, GIF, BMP и SVG. Есть прозрачный PNG и JPEG 3840 × 2160, оригинал до 17,8 МиБ. PNG/BMP сохранены без сжатия, JPEG — с качеством 100, WebP/AVIF — без потерь. Это тестовая мишень, не фотографии.
На демостранице изображения загружаются при прокрутке, а «Загрузить все примеры» позволяет проверить одновременную загрузку. У карточки есть фактический URL, разрешение, статус и ссылка «Скачать оригинал без CDN».
Показатели «До → После»
- До — размер исходного файла.
- После — размер результата, сообщённый CDN после загрузки изображения.
- Меньше/больше на …% — процент изменения относительно оригинала и разница в байтах.
- Формат ответа — фактический формат CDN, например AVIF.
- Без обработки CDN — файл остался на исходном сайте; подмена для него не выполнялась.
- Недоступно — получить размер не удалось. Это не нулевой вес и не доказательство, что изображение сломано.
Для измерения делается отдельный запрос только заголовков HEAD; тело изображения повторно не скачивается. Размер относится к самому файлу, а не ко всему сетевому трафику с заголовками и транспортным сжатием. МиБ = 1 048 576 байт, КиБ = 1 024 байта.
Примеры измерений тестового профиля BY от 19 сентября 2026 года:
| Исходник | До | После | Изменение |
|---|---|---|---|
| JPEG 4K | 17,80 МиБ | 869 КиБ | −95,2% |
| PNG | 10,57 МиБ | 387,2 КиБ | −96,4% |
| BMP | 10,55 МиБ | 387,2 КиБ | −96,4% |
| WebP lossless | 62,6 КиБ | 62,6 КиБ, WebP | 0% |
Эти результаты относятся к конкретным техническим изображениям и настройкам CDN. Это не обещание одинакового сжатия любых фотографий. Текущий профиль CDN сохраняет меньший исходный WebP, если браузер его принимает. Ранее принудительный AVIF увеличивал этот пример на 519%; это исторический результат. Для других файлов рост всё ещё возможен и показывается явно.
Видео и анимированный GIF
Начиная с 0.2.0 плагин использует видео API CDN для следующих исходников:
- MP4 и MOV — варианты с заголовком
ftyp; - WebM и MKV;
- AVI;
- анимированный GIF.
Нужны лицензия CDN Advanced с поддержкой video, включённое видео API и PHP cURL на сайте. Выход — MP4 H.264/AAC, до 1920×1080 и 30 кадров/с. Для GIF сохраняется один цикл движения, прозрачность заменяется белым фоном; повтор включается через loop.
Как включить
- Подготовьте вне корня сайта каталог очереди, доступный пользователю PHP, с правами 0700.
- В настройках выбранного сайта включите обработку видео и укажите этот каталог.
- Разрешите конкретные публичные каталоги, например
/upload/media/. Скрытые файлы и материалы с авторизацией сюда не входят. - Выберите пресет balanced или small, введите серверный токен видео API выбранного HTTPS CDN. Пустое поле сохраняет прежний токен; при смене адреса нужен соответствующий токен.
- Настройте запуск обработчика раз в минуту от пользователя сайта. Форма настроек показывает команду с вашим webroot и SITE_ID:
php /path/to/site/local/modules/zorka.cdn/tools/video-worker.php /path/to/site s1
При открытии HTML плагин ставит локальное видео в очередь, а обработчик по cron отправляет его в CDN и получает результат. Открытие страницы не ожидает конвертации. После готовности заменяются video src, source src внутри video и атрибуты data-src/data-lazy-src; тип source становится video/mp4.
Изображения загружаются с домена CDN; готовые MP4 — с домена вашего сайта. Обработку видео выполняет CDN, затем плагин сохраняет результат в /upload/zorka-cdn-video/. Видео API требует токен даже для скачивания; токен остаётся на сервере и не передаётся плееру. Локальная копия сохраняется после истечения срока хранения задачи на CDN.
Для анимированного GIF используйте видеоэлемент:
<video controls loop muted playsinline src="/upload/media/animation.gif"></video>
GIF внутри img не заменяется на MP4. До готовности/при ошибке остаётся исходный адрес; не каждый исходный формат умеет проигрывать браузер. После обработки обновите страницу, а при использовании композитного кеша очистите его. В настройках видны последние задачи и доступна кнопка повтора неудачных.
Лимиты плагина на сайт: исходник 64 МиБ, результат 128 МиБ, до 1000 записей и 2 ГиБ готовых MP4. Ограничения самого CDN могут быть строже. Автоматической очистки результатов нет — опубликованные ссылки могут использоваться страницами. HLS/DASH, потоковое видео и произвольные внешние источники не поддерживаются.
Примеры «До → После»
В тестовой галерее добавлены шесть движущихся примеров: MP4, MOV, WebM, MKV, AVI и GIF, по 4 секунды, 480×270. У видео есть звук; у GIF его нет. Результаты BY от 19 сентября 2026:
| Исходник | До | После, MP4 | Изменение |
|---|---|---|---|
| MP4 lossless | 1,35 МиБ | 287,2 КиБ | −79,2% |
| MOV | 3,85 МиБ | 274,5 КиБ | −93,0% |
| WebM lossless | 1,18 МиБ | 287,3 КиБ | −76,3% |
| MKV lossless | 1,43 МиБ | 287,2 КиБ | −80,4% |
| AVI без сжатия | 35,98 МиБ | 284,2 КиБ | −99,2% |
| Анимированный GIF | 990,1 КиБ | 213,6 КиБ | −78,4% |
Размер «После» для видео — размер сохранённого готового MP4. Это измерения технической мишени, а не обещание одинаковой экономии для любого ролика. Больший результат также показывается без скрытия роста.
Обновление, выключение и удаление
Перед обновлением сохраните резервную копию сайта и БД. Откройте Marketplace → Обновление решений, выберите zorka.cdn и установите доступное обновление через Битрикс Маркет. Проверьте версию в списке установленных решений. Если PHP использует OPcache без проверки изменений, обновите его штатными средствами хостинга.
После включения, выключения, смены адреса/региона или удаления очистите композитный HTML-кеш: сохранённые страницы могут выдаваться без PHP и содержать прежние URL. Простое изменение настройки не переписывает такие страницы.
Удаление снимает обработчик подмены, сохраняя настройки. Исходные изображения и контент остаются на сайте. CDN-кеш управляется отдельно. Готовые MP4 и опции видео сохраняются при удалении; при окончательном удалении уберите задание cron вручную.
Если что-то не работает
| Признак | Что проверить |
|---|---|
| Адрес изображения не поменялся | Выбранный сайт, включение, расширение, origin, исключения, тег base и композитный кеш |
| С CDN изображение не загружается | Тот же файл на origin, DNS/TLS, HTTP-ответ CDN, поддержка входного формата и лимиты сервиса |
| Старый регион после переключения | Очистить композитный HTML-кеш и обновить страницу |
| «После» недоступно | HEAD и CORS-заголовки CDN; изображение и измерение проверяются отдельно |
| После конвертации файл больше | Сравнить выходной формат и профиль CDN; модуль подмены не выбирает меньший из двух файлов |
Проверена доставка через BY. Публичная готовность EU/RU и совместимость с вашим шаблоном требуют отдельной проверки; локальные тесты переключения регионов этого не заменяют.