LIVE
Новость

Почему мобильное приложение работает только с VPN и как это исправить

Примерно так начался день у автора статьи на Хабре: пользователи из регионов жаловались, что приложение не открывается.

Аврора Шинкарева·обновлено 01 августа 2026 г.

Почему мобильное приложение работает только с VPN и как это исправить

Знаете это ощущение, когда открываешь тикеты в поддержке и читаешь одно и то же сообщение снова и снова? Примерно так начался день у автора статьи на Хабре: пользователи из регионов жаловались, что приложение не открывается. У кого-то вечная загрузка, у кого-то белый экран, а у кого-то всё магически работает, но только через VPN. На собственной машине автора всё летало, с зарубежного сервера — тоже без сюрпризов. Я хорошо понимаю эту боль: когда проблема плавающая, непонятно, за что хвататься, и хочется списать всё на «глюки провайдеров».

Что пряталось между пользователем и хостингом

Когда разработчик попросил нескольких пользователей прислать дампы из DevTools, картина начала складываться. Проблем оказалось не одна — сразу две, и они маскировали друг друга. Первая: часть TLS-соединений зависала ещё на этапе ClientHello, рукопожатие просто не доходило до сервера, и сессия рвалась по таймауту. Вторая: у тех, кому TLS всё же удавался, ломалось всё на этапе загрузки статики. Vite по умолчанию режет фронтенд на кучу мелких чанков, а HTTP/2 мультиплексирует их в одном соединении — формально красиво, но если сам канал до зарубежного IP уже деградировавший (из-за SNI-фильтрации или шейпинга на стороне провайдера), то пока грузится один HTML, задержки почти незаметны. А вот когда следом по тому же плохому каналу нужно дотянуть ещё сорок файлов, деградация бросается в глаза: таймауты, оборванные загрузки, тот самый белый экран, на который жаловались пользователи.

Гибридная схема как лекарство

Решением стала развёртка Selectel CDN перед зарубежным хостингом. Московские ноды принимают трафик из РФ, у провайдеров к ним претензий нет, TLS-рукопожатие проходит без таймаутов. Два практических момента, которые могут сэкономить команде день дебага: передача оригинального Host-заголовка клиента должна быть включена обязательно — без неё Nginx на сервере не понимает, какой домен запрашивают, и все редиректы с www улетают на дефолтный виртуальный хост. А редирект с HTTP на HTTPS лучше включать прямо на уровне CDN, не гоняя лишний хоп до origin ради одного редиректа. Сертификат Let's Encrypt загружается на узлы CDN для нужных доменов.

Доступ как системная проблема

Эта история про деградацию канала — не единичный кейс, а симптом более широкой тенденции. По данным iPhones.ru, российские iOS-разработчики уже три года живут в режиме, когда Apple может заблокировать аккаунт, растянуть проверку на месяцы и в итоге отказать без понятного объяснения, даже при полном пакете документов и независимом аудите. Комплаенс ошибается, Apple не обязана объяснять причины, а легального пути дистрибуции в обход App Store, как это разрешено для части стран Евросоюза, в России нет. В итоге деградация касается не только команд разработки, но и обычных пользователей: нужного приложения просто нет в доступе, и единственный работающий путь — снова включить VPN.