Как определить причину неудачного сетевого (HTTP) запроса в iOS‑приложении?

С недавнего времени мой сайт перестал открываться на всех устройствах с iOS ниже 26-й версии (26 — последняя версия на данный момент).<br/> <br/> Не загружаются ни страницы на Django, ни на React. При этом проблема наблюдается только на iPhone с устаревшей iOS — браузер, похоже, не влияет (проверял в Safari, Yandex и Mozilla).<br/> <br/> На устройствах с iOS 26, на Android и на десктопах сайт открывается без проблем как в мобильных сетях, так и в домашнем интернете.<br/> <br/> Единственное, что помогает открыть сайт на старом iOS — подключение через OpenVPN к серверу в Москве или любой другой VPN. При этом на том же Wi‑Fi телефон на Android или iPhone с iOS 26 открывает сайт без VPN.<br/> <br/> Я не понимаю, с чего начинать поиск причины и куда смотреть — по nginx запросы на сервер доходят. Проблему заметил сегодня; неделю назад всё работало нормально. Сайту почти год, это простой интернет-магазин на Django+React.<br/> <br/> С чего стоит начать расследование в таком случае?<br/> <br/> UPD: Домен НЕ помечен как мошеннический, никаких предупреждений нет. В google.com/safe-browsing тоже чисто.<br/> <br/> UPD2: Поменял в nginx корень на редирект — ситуация не изменилась, значит проблема не в подгрузке элементов сайта. С ПК, новых iOS и Android происходит редирект на ya.ru, а у остальных устройств соединение висит до таймаута.<br/> <br/> <pre><code>location / {
  • 5 апреля 2026 г. 17:01
Ответы на вопрос 4
Коротко — сначала выяснить, на каком этапе «коллапс» соединения: DNS → TCP → TLS → HTTP. Ниже — план действий с практическими командами и интерпретацией результатов, а также самые вероятные причины (в вашем случае — очень похоже на проблемы с IPv6/AAAA или с сетевым путём со стороны провайдера).

1) Быстрая проверка с компьютера (или с сервера)
- Посмотреть какие адреса отдает DNS:
  - dig A example.com +short
  - dig AAAA example.com +short
  Если есть AAAA — это первый подозреваемый: старые iOS могли попробовать IPv6 и «зависнуть», если по этому адресу нет реального сервиса или путь битый.

- Принудительно протестировать по IPv4/IPv6:
  - curl -v --ipv4 https://example.com/ 
  - curl -v --ipv6 https://example.com/
  Если по IPv6 запрос виснет/таймаутится, значит проблема в IPv6-маршруте/настройке.

- Тест TLS:
  - openssl s_client -connect example.com:443 -servername example.com -tls1_2
  - openssl s_client -connect example.com:443 -servername example.com -tls1_3
  Посмотрите, проходят ли рукопожатия, какие шифры, нет ли ошибок сертификата.

- Онлайн-инструменты:
  - SSL Labs (https://www.ssllabs.com/ssltest/) — покажет поддерживаемые протоколы/шифры и совместимость со старыми iOS.
  - DNS checker (dig, online DNS check) — убедиться, что по разным резолверам адреса одинаковы.

2) Наблюдение на сервере (очень важно)
- Посмотрите, попадают ли SYN/пакеты от проблемных устройств на сервер:
  - sudo tcpdump -n host <IP_клиента> and port 443
  или отслеживать вообще: sudo tcpdump -n port 443
  Если от проблемного клиента нет вообще пакетов — проблема на уровне DNS/маршрута/провайдера.
  Если есть SYN, но нет TLS ClientHello — возможно пакеты обрываются/фильтруются или сервер не успевает/отбивает.
  Если есть ClientHello — смотрите ответ сервера.

- Логи nginx:
  - tail -f /var/log/nginx/access.log /var/log/nginx/error.log
  Если запросы не попадают в access.log — значит TCP/TLS не дошло до уровня HTTP.

Интерпретация результатов tcpdump/nginx:
- Нет DNS ответа / клиент не делает TCP соединение → проверяйте DNS (AAAA) и маршруты.
- TCP SYN приходит, SYN/ACK уходит, но клиент не продолжает → возможны проблемы MTU/PMTU (через Wi-Fi/мобильный/провайдера), рекламация MSS, или middlebox у провайдера режет пакеты.
- Клиент отправляет TLS ClientHello, сервер не отвечает → возможно firewall/IPS/NGFW или плохая поддержка ALPN/HTTP2/TLS, или сервер генерирует RST.
- Сервер отвечает и в логах — тогда проблема на уровне приложения/редиректа.

3) Проверки, специфичные для вашего описания (VPN помогает)
Факт, что VPN помогает, сильно склоняет к сетевой проблеме у провайдера/маршрута или к тому, что при VPN идёт другой DNS/IPv4-путь:
- Проверьте AAAA: если есть неверная AAAA — клиент попытается по IPv6 и зависнет; VPN может давать доступ по IPv4 и работать.
- Проверьте, какой DNS использует проблемный iPhone (операторы/мобильные сети подставляют свой резолвер). Попробуйте на проблемном устройстве вручную прописать 8.8.8.8/1.1.1.1 и повторить.
- Проверьте IPv6-доступность сервера: traceroute6, ping6 (если сервер не слушает IPv6 или путь битый — удалить/исправить AAAA).
- Проверьте, не появилось ли где-то правило firewall/acl, которое блокирует «старые» user-agents, или блокировка по гео/IP (при этом VPN меняет исходный IP).

4) Стоит проверить и такие вещи
- HTTP/2 и ALPN: некоторые старые стеки реализации HTTP/2 плохо работают с некоторыми middlebox — временно отключите http2 в nginx и проверьте.
- TLS конфигурация: если вы недавно жестко ограничили протоколы/шифры (например только TLS1.3 или нестандартные шифры), старые iOS не смогут договориться. Откатите на поддерживающий TLS1.2 набор шифров.
- OCSP/Stapling: если OCSP виснет, старые клиенты могут ждать. Попробуйте временно выключить ssl_stapling и проверить.
- MTU/fragmentation: если пакет MSS слишком большой через определённый провайдер, соединение может виснуть. В логах/pcap это видно как многократные Retransmit. Решение — MSS clamping на роутере/неправильный PFsense/ISP.
- CDN / прокси: если вы используете CDN, проверьте маршруты и конфигурацию CDN и наличие проблем в их edge.

5) Короткий план действий для вас прямо сейчас
1. На сервере запустите tcpdump и попросите владельца проблемного iPhone открыть сайт (или подключите его к Wi‑Fi и воспроизведите):
   - sudo tcpdump -n host <IP_телефона> and port 443
   Если пакетов нет — сначала смотрим DNS/маршрут.
2. С компьютера/серверa:
   - dig A/AAAA example.com +short
   - curl -v --ipv4 https://example.com/
   - curl -v --ipv6 https://example.com/
3. Временно отключите http2 в nginx и перезапустите, проверьте (на всякий случай).
4. Проверьте nginx ssl_protocols/ssl_ciphers и откатите на более совместимые настройки (включить TLS1.2 и обычные ECDHE шифры).
5. Проверьте DNS-провайдера и TTL/AAAA: если AAAA не нужна — временно удалите и проверьте.

6) Вероятные причины в порядке вероятности для вашего случая
- Неправильная AAAA-запись / битый IPv6-маршрут у провайдера (VPN помогает) — самое вероятное.
- Изменение TLS/шифров/HTTP2, несовместимое со старой iOS.
- Провайдерская/сетевой middlebox фильтрация (по IP/порт/паттерну), DNS-перенаправление.
- MTU/fragmentation проблемы.

Если хотите, могу:
- Проанализировать выводы dig/curl/openssl, которые вы получите;
- Сформировать конкретные команды tcpdump/wireshark-фильтры для вашего сервера и объяснить, что искать в захвате;
- Помочь подобрать безопасную (совместимую) ssl конфигурацию nginx, чтобы поддержать старые iOS.

Напишите результаты dig/ curl/tcpdump или выдайте выводы логов — помогу интерпретировать и предложить точный фикс.
предположение - РКН блокирует отпечаток \ сигнатуру старого Сафари браузера... <br/> он же тут умудрился положить опять пол инета в стране <br/> <br/> тем более раз через ВПНку всё работает)
Мы, кажется, столкнулись с абсолютно такой же проблемой. <br/> <br/> У нас прод на VPS (nginx + SPA), который стабильно работал около полугода, и примерно с 1 апреля начались странные зависания именно на iPhone (iOS 18.x). Причём браузер не важен — Safari, Chrome ведут себя одинаково. <br/> <br/> Симптомы почти один в один: <br/> <br/> * страница иногда просто висит и в итоге падает в ERR_CONNECTION_TIMED_OUT <br/> * в этот момент запросы вообще не доходят до nginx (нет записей в логах) <br/> * через VPN с того же устройства всё открывается мгновенно <br/> * по HTTP (другой порт) всё работает стабильно <br/> <br/> Пока тоже не можем точно понять причину, но всё указывает на какой-то сетевой уровень (маршрутизация / фильтрация / DPI). <br/> <br/> Поддержка vps хостера ответила: "возможно присутствует ограничение на стороне ТСПУ с доступом на 443 порт". <br/> <br/> Если кто-то докопается до реального источника проблемы — будет очень полезно узнать.
Проблема тут не в сайте. <br/> <br/> У нас такая же проблема, у мобильных пользователей iOS может не работать приложение, а с той же сети одновременно сидит Андроид и все работает ок, с того же вай фая. Более того, есть когда в семье новый айфон и предыдущий Айфон, пользователи пишут что новый работает, старый не работает, обновляют iOS, он начинает работать. Пишут что с VPN часто работает сразу без проблем, но не всегда. <br/> <br/> Очень странно что у кого не работает, обновляют iOS и начинает работать без проблем. <br/> Еще факт интересный в том что у нас много пользователей из РБ, вот у них вообще жалоб нет никаких, всегда все ок. <br/> <br/> Поддержка дата центра отвечает что проблема массовая так как не только мы жалуемся на это (что из одной сети все доступно, из другой сети ни у кого не работает), говорят что это идет фильтрация какая-то ТСПУ в Роскомнадзоре наверное или вышестоящие провайдеры что-то фильтруют <br/> <br/> Еще наблюдение что в Москва МО Питер почти нет жалоб, в основном жалобы из регионов по iOS, по андроиду вообще нет проблем никаких <br/> <br/> У нас часть серверов в защищенной сети, мы делали там новый домен новый IP, вроде все завелось, потом буквально через час снова все потухло потому что новый домен и новый IP перестали работать, как будто по кнопке включился какой-то фильтр. <br/> <br/> Перенесли отдельный домен чисто для iOS приложений за пределами защищенной сети, скорее поддомен неработающего на ios домена, там вроде ок, равно изредка прилетают жалобы что iOS приложения не могут до них достучаться <br/> <br/> Вся эта свистопляска началась 1 апреля, но пик 3-4-5-6 апреля, щас чуть меньше жалоб но все равно они не пропали
Похожие вопросы