С приложением React Native (проверено только приложения, сгенерированные с create-react-app
) у некоторых пользователей iPhone возникает проблема, из-за которой приложение практически никогда не может отправлять веб-запросы нашему API при подключении через сотовые данные.Проблемы с доменом указывают на Amazon Elastic Load Balancer (уровень 7, завершение SSL), который указывает на обратный прокси-сервер Nginx (внутри кластера EKS Kubernetes).Другие API (например, Mapbox), вызываемые приложением, отлично работают с сотовыми данными, включая один из наших, размещенный на выделенном сервере.Единственные запросы, которые не работают, это запросы в нашем домене ELB.Когда пользователь переключается на WiFi, наше приложение может отправлять веб-запросы на этот домен.Это наблюдалось на iPhone 7, iPhone 8 и iPhone X, все под управлением iOS 12.3.1.Одно устройство Verizon, а 5 других - AT & T.Каждый вызов API является HTTPS.Удаление и переустановка приложения и перезапуск устройства не решают проблему.Мы подтвердили во всех случаях, что сотовые данные были включены для приложения в Settings > Cellular > [App name]
и в Settings > [App name] > Use Cellular Data
.
Приложение построено с использованием React Native, а веб-запросы выполняются с cross-fetch
library.
Нам удалось получить устройство, которое имеет проблему, и запустить его через XCode.Вот подмножество стека ошибок, захваченных в Xcode:
nw_connection_copy_connected_local_endpoint [C12] Connection has no local endpoint
2019-06-27 11:26:16.841347-0400 myapp[23700:1527268] [BoringSSL]
nw_protocol_boringssl_get_output_frames(1301) [C10.1:2][0x117d5a050] get output frames failed, state 8196
2019-06-27 11:26:22.465855-0400 myapp[23700:1527305] [BoringSSL] nw_protocol_boringssl_error(1584) [C20.1:2][0x119b0e420] Lower protocol stack error: 54
2019-06-27 11:26:22.466665-0400 myapp[23700:1527305] TIC TCP Conn Failed [20:0x280022400]: 1:54 Err(54)
2019-06-27 11:26:23.040101-0400 myapp[23700:1527399] Task <DD5FDD4A-1BE0-41ED-AAC4-9EB07F61F109>.<7> HTTP load failed (error code: -1005 [1:54])
2019-06-27 11:26:23.040408-0400 myapp[23700:1527305] Task <DD5FDD4A-1BE0-41ED-AAC4-9EB07F61F109>.<7> finished with error - code: -1005
load failed with error Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=54, NSUnderlyingError=0x283a521f0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x28161ab70 [0x1e9e5d420]>{length = 16, capacity = 16, bytes = 0x100201bb3416ca8a0000000000000000}, _kCFStreamErrorCodeKey=54, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <DD5FDD4A-1BE0-41ED-AAC4-9EB07F61F109>.<7>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <DD5FDD4A-1BE0-41ED-AAC4-9EB07F61F109>.<7>"
), NSLocalizedDescription=The network connection was lost.
Запросы к этому конкретному [ELB] -> [Контейнер Nginx] -> [Служебные контейнеры] установка иногда будет работатьно тогда остановись.Это почти указывает на ситуацию поддержки активности, такую как эта проблема .У нас было установлено время ожидания простоя ELB по умолчанию (60 с), и мы увеличили его до 300 с без видимого эффекта.Мы попытались установить для keep-alive для Nginx значения 360 и 0 (полностью отключены).
Для данного домена у нас есть набор служб, размещенных в кластере Kubernetes, таких как Java и Node.JS.Эта проблема затрагивает их всех одинаково.
Ни один из пользователей приложения Android не сообщил об этой проблеме.
Все устройства, которые сталкиваются с этой проблемой, делают это последовательно, это не прерывается.
Из-за типа ошибки запросы никогда не доходят до наших журналов Nginx.