Smartico Custom Hostnames
Проблема: Smartico подключается как внешний скрипт со стороннего CDN. В случае блокировки или недоступности этого CDN на продуктах перестает работать значительная часть функционала, связанная со Smartico.
Решение: Организовать раздачу скриптов и ресурсов Smartico через собственные поддомены продукта (Self-hosting/Proxying).
Ресурсы Smartico, требующие переноса:
- JS-скрипт (пример:
https://sm.atomcasino423.com/snextcode.js) - WebSocket Entry Point (пример:
wss://ws.atomcasino423.com/websocket/services) - CDN для изображений
Перенос ресурсов на поддомены продукта позволит минимизировать риски блокировок.
Реализация
Созданы служебные хосты (Origins):
api5.sCNAMEprod5-channel-1797681357.us-east-2.elb.amazonaws.comlibs.sCNAMEd18xfax5gdc43x.cloudfront.net
Примечание: Из-за специфики (домены третьего уровня) для этих хостов не активирован SSL, поэтому проксирование для них отключено.
Маршрутизация трафика осуществляется через Cloudflare Worker с использованием механизма Origin Override. В DNS-зонах продуктов отсутствуют CNAME-записи, указывающие напрямую на эти служебные хосты. Пример настроек DNS.
За определение целевого origin и подмену данных отвечают скрипты воркеров:
Изменения на платформе
Для корректной работы необходимо перенаправить не только загрузку скрипта, но и WebSocket-соединения. Для этого в конфигурацию нашей версии скрипта Smartico была добавлена опция ws_url.
Пример инициализации:
<script>
(function(d, r, b, h, s){h=d.getElementsByTagName('head')[0];s = d.createElement('script');s.onload=b;s.src=r;h.appendChild(s);})
(document, 'https://sm.atom-casino.com/snextcode.js', function() {
_smartico.init('_label_key_', {
brand_key: '_brand_key_',
ws_url: 'wss://ws.atom-casino.com/websocket/services'
});
});
</script>
Задача: Изменить механизм подключения на продукте следующим образом:
- Загружать скрипт с поддомена (например,
sm.domain.com). - Передавать параметр
ws_urlс адресом WebSocket на поддомене (например,ws.domain.com).
Сложность: Необходимо динамически формировать адреса поддоменов sm. и ws. относительно текущего базового домена, на котором находится пользователь.
Изменения в процессах IT Dept
При развертывании новых зеркал необходимо:
- Создавать соответствующие поддомены (
sm,ws). - Настраивать и привязывать воркеры для каждого зеркала.
- Проводить отдельную проверку работоспособности проксирования.
Текущий статус и TODO
- Временное костыль: В скриптах подмены (workers) сейчас реализована hardcode костыль, позволяющая работать с конкретным кастомным доменом даже без передачи параметра
ws_url. Это временное решение, которое необходимо удалить после обновления платформы. - Проксирование изображений: Часть изображений все еще не проксируется и пытается загрузиться с оригинального домена.
Пример:
https://static5.smr.vc/303dcdcd0987e36d3fde72-mail1-4.png