Cloudflare не работает с включенным проксированием, юзер получает первые 16кб ответа и полностью работает, если выключить проксирование, оставив его в режиме DNS-only. Смысла в этом мало, но это понимание даёт нам обойти ограничения.
Что делаем:
1. Создаем доп. поддомен для ru-региона с выключенным проксированием. Например у вас мини приложение на miniapp.domain.com (проксирование включено), делаем второй ru-miniapp.domain.com (проксирование выключено)
2. Переходим в Compute (Workers) -> Workers & Pages -> Create и создаем воркер:
export default {
async fetch(request) {
const country = request.cf?.country || "XX";
const url = new URL(request.url);
if (country === "RU") {
const redirectUrl = new URL(url.pathname + url.search, "YOU RU-MINIAPP_DOMAIN");
return Response.redirect(redirectUrl.toString(), 302);
}
return fetch(request);
}
};3. Заходим в домен -> Workers Routes -> Add Route и добавляем наш воркер на основной поддомен, где включено проксирование
4. Так делаем для каждого поддомена и домена сайта
Что в итоге мы имеем:
1. На основном поддомене включено проксирование, запрос идёт к ближайшему кэш-серверу, мы сохраняем CDN, быструю скорость ответа по всему миру и защиту от DDOS
2. Трафик для RU-региона всё ещё идёт к ближайшему кэш серверу, редиректиться на поддомен без проксирования и дальше спокойно доходит до РФ юзеров
3. Абсолютно никакой доп. нагрузки на ваши сервера
Нюанс:
Cloudflare Worker-ы не полностью бесплатные, но цена там 3 копейки и сильно дешевле, чем своя реализация через доп. прокси сервера для РФ-юзеров. Да и гемора объективно сильно меньше, внедряется эта штука за 5 минут.