Да, это снова пост про яндекс облако. При всем моем уважении к поддержке яндекс (они классно работают, нет претензий), я выполняя казалось бы обычные задачи, сталкиваюсь с необычнми проблеми. И да, не всегда виноват яндекс облако, но так как я работаю с ним, то и упоминаю его.
Ситуация такая:
Собрал лендинг: Astro (SSG, чистая статика), выкатил на объектное хранилище с website-hosting + CDN перед ним. Открывается мгновенно, Lighthouse зелёный, OG-теги на месте. Все ок.
Кидаю ссылку в Telegram - превью не появляется. Открываю Facebook Sharing Debugger - HTTP 403 и приписка "This response code could be due to a robots.txt block. Please allowlist facebookexternalhit on your sites robots.txt config to utilize Facebook scraping". Ну я то знаю что дело не во мне.
Ну ок, поехали разбираться (а вообще для такого простого сценария я не должен дебажить это дерьмо)
1. robots.txt? -> User-agent: * / Allow: /. Чисто. Мимо.
2. Может, режется по User-Agent?
curl -A "facebookexternalhit/1.1" https://…/ -> 200
curl -A "TelegramBot" https://…/ -> 200
Оба 200. Не UA.
3. TLS? openssl s_client -> полная цепочка (leaf + 2 промежуточных), verify return code: 0. Тоже не то, да и FB получил именно HTTP 403, а не ошибку рукопожатия, значит соединение успешно установлено и FB получил "нормльный" HTTP ответ.
4. Мигает ли источник под нагрузкой?
40 параллельных запросов напрямую к website-эндпоинту хранилища, в обход CDN -> 40/40 = 200. Все ок. Да и это же CDN для статики! Какая нахрен нагрузка.
5. Может, гео-блок / вообще недоступность извне?
Прогнал через check-host из 12 стран (в т.ч. США и Нидерланды, там ДЦ FB и Telegram) -> везде 200. Сторонний OG-скраппер microlink.io (headless-браузер) -> корректно прочитал и title, и картинку. Даже в ВК (прости Господи) OG загрузился.
Burst 15 параллельных, HEAD-запрос, отдельно og-image, запрос с Range - все 200.
Из моего окружения 403 не воспроизводится ВООБЩЕ ничем. 200 получают: браузеры, curl с любым UA, 12 стран, США, Нидерланды, сторонние скрапперы. А 403 только реальные краулеры Facebook и Telegram.
Единственная переменная, которую я не могу подделать это исходные IP-диапазоны (ASN).
Еще раз проверил настройки CDN-ресурса: ограничение по IP нет, по странам нет, защита токеном нет. Конфиг пустой. Значит 403 прилетает на уровне edge/сети и фильтруются конкретные ASN краулеров.
Ну я пошел дальше в поддержку облака. Ответ был очень ожидаемым: "Со стороны Yandex Cloud фильтраций и ограничений трафика на уровне настроек ваших CDN-ресурсов нет — правила по IP, ASN, User-Agent и Referer не включены. Наблюдаемое поведение похоже на фильтрацию трафика на транзитных сетях за пределами инфраструктуры Yandex Cloud, повлиять на которую с нашей стороны напрямую нельзя."
"Заебись у вас хип-хоп", как читали в своем ганста репе группа Триагрутрика.
И все и всех понять помно. И Яндекс в той же ситуации, что и мы с вами. Им остается искать как и нам варианты решений. Но блин! Ну сколько можно!? И это вопрос не к Яндексу.
А помните, были времена когда мы на такую херню не тратили время и решали реальные инженерные задачи? Вот этот отрывок фильма вспомнился https://www.youtube.com/watch?v=oVrCN8ptO_8