Вопрос или проблема
Мы используем Nexus в качестве репозитория/прокси для артефактов в сети нашей организации, за корпоративным файрволом. В последнее время мы начали замечать проблемы, когда файлы не загружаются или загружаются только частично.
Изучив ситуацию, мы выделили проблему в странном времени ожидания перед началом загрузки. Время ожидания составляет ровно одну минуту перед началом загрузки.
Следующий след запроса curl показывает детализированные логи. Мы пробовали с множеством различных пакетов, это не конкретный файл. После сообщения “Запрос полностью отправлен”, соединение похоже на то, что останавливается на одну минуту.
Мы пробовали ту же команду из другого места (без прокси), и, как и ожидалось, загрузка начинается немедленно. Мы не отвечаем за прокси, но пытаемся предоставить подсказки, чтобы помочь решить проблему.
На всякий случай, прокси – это прокси Forcepoint (ранее Websense), анонимизированный ниже.
В чем может быть проблема? Что еще мы можем попробовать, чтобы разобраться в этом?
C:\>curl https://repo1.maven.org/maven2/com/google/guava/guava/25.1-android/guava-25.1-android.jar -x http://our-proxy.xx.xx:443 -v -k --output c:\temp\mavenJAR.jar
* Использует переменную окружения прокси no_proxy == 'localhost,127.0.0.1'
% Всего % Получено % Передано Средняя скорость Время Время Время Текущее
Загрузка Загрузка Всего Исправлено Осталось Скорость
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Хост our-proxy.xx.xx:443 был разрешен.
* IPv6: (нет)
* IPv4: 192.168.32.25
* Пытаемся 192.168.32.25:443...
* Подключено к our-proxy.xx.xx (192.168.32.25) порт 443
* CONNECT туннель: HTTP/1.1 согласован
* выделение буфера подключения
* Установить HTTP-прокси-туннель к repo1.maven.org:443
> CONNECT repo1.maven.org:443 HTTP/1.1
> Хост: repo1.maven.org:443
> User-Agent: curl/8.8.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Соединение установлено
< Дата: Пт, 11 Окт 2024 15:32:45 GMT
< Proxy-Connection: Keep-Alive
< Via: 1.1 PROXY-1
<
* Фаза CONNECT завершена
* Туннель CONNECT установлен, ответ 200
* schannel: отключено автоматическое использование клиентского сертификата
* ALPN: curl предлагает http/1.1
* ALPN: сервер не согласовал протокол. Использует по умолчанию.
* использование HTTP/1.x
> GET /maven2/com/google/guava/guava/25.1-android/guava-25.1-android.jar HTTP/1.1
> Хост: repo1.maven.org
> User-Agent: curl/8.8.0
> Accept: */*
>
* Запрос полностью отправлен
0 0 0 0 0 0 0 0 --:--:-- 0:01:01 --:--:-- 0* schannel: не удалось расшифровать данные, требуется больше данных
< HTTP/1.1 200 ОК
< ETag: "b506eaec680c6d92d5f063fa1d57956d"
< Content-Type: application/java-archive
< Last-Modified: Ср, 23 Май 2018 17:45:28 GMT
< X-Checksum-MD5: b506eaec680c6d92d5f063fa1d57956d
< X-Checksum-SHA1: bdaab946ca5ad20253502d873ba0c3313d141036
< Via: 1.1 varnish, 1.1 varnish, HTTPS/1.1 PROXY-1
< Accept-Ranges: bytes
< Дата: Пт, 11 Окт 2024 15:32:45 GMT
< Возраст: 1482977
< X-Served-By: cache-iad-kcgs7200117-IAD, cache-par-lfpg1960052-PAR
< X-Cache: HIT, HIT
< X-Cache-Hits: 94801, 1
< X-Timer: S1728660766.590888,VS0,VE6
< Content-Length: 2591373
<
* schannel: не удалось расшифровать данные, требуется больше данных
{ [32768 байт данных]
* schannel: не удалось расшифровать данные, требуется больше данных
1 2530k 1 32768 0 0 528 0 1:21:47 0:01:01 1:20:46 7065* schannel: не удалось расшифровать данные, требуется больше данных
{ [49152 байта данных]
* schannel: не удалось расшифровать данные, требуется больше данных
{ [32768 байт данных]
[ ... много этого ...]
* schannel: не удалось расшифровать данные, требуется больше данных
{ [32768 байт данных]
* schannel: не удалось расшифровать данные, требуется больше данных
{ [32768 байт данных]
100 2530k 100 2530k 0 0 41432 0 0:01:02 0:01:02 --:--:-- 799k
* Соединение #0 с хостом our-proxy.xx.xx осталось целым
Ответ или решение
Проблема, которую вы описали, связана со скачиванием файлов из репозитория Maven через корпоративный прокси-сервер, в данном случае Forcepoint. Основная особенность заключается в том, что наблюдается ровно одна минутная задержка перед началом загрузки файла. Это дает основание предполагать наличие проблем с конфигурацией прокси или его взаимодействием с приложением.
Возможные причины и рекомендации по решению проблемы
-
Настройки прокси-сервера:
- Убедитесь, что прокси-сервер правильно настроен для обработки HTTPS-трафика. Иногда корпоративные прокси могут иметь настройки, касающиеся таймаутов соединений или ограничения на объём загружаемых данных, что может привести к такой задержке. Свяжитесь с администратором прокси для проверки и оптимизации этих настроек.
-
Проблема с кешированием:
- В вашем журнале видно, что ответ приходит от кэша (при помощи заголовков
X-Cache
иX-Cache-Hits
). Если кэш настроен неправильно или истек, это может вызвать задержки. Проверьте настройки кэширования на вашем прокси-сервере, чтобы убедиться, что он правильно обрабатывает запросы к репозиторию Maven.
- В вашем журнале видно, что ответ приходит от кэша (при помощи заголовков
-
Таймауты:
- Обратите внимание на установленные таймауты в прокси и в клиентах, использующих его. Например, если таймаут подключения к серверу слишком длинный на уровне прокси, это может вызвать вышеупомянутую задержку.
-
Обновления на стороне клиента:
- Проверьте версию
curl
, которую вы используете. Если это возможно, обновите ее до последней версии. Иногда старые версии могут иметь проблемы совместимости с современными протоколами или методами шифрования.
- Проверьте версию
-
Анализ трафика:
- Для более глубокого анализа проблемы рекомендуется провести мониторинг трафика через инструменты, такие как Wireshark. Это позволит увидеть, что происходит на сетевом уровне во время паузы.
-
Проблемы с шифрованием:
- В вашем выводе упоминается ошибка
schannel: failed to decrypt data, need more data
. Это может быть связано как с настройками шифрования в прокси, так и со сбоем шифрования на стороне клиента. Убедитесь, что используемые алгоритмы шифрования поддерживаются как клиентом (curl), так и сервером (repo1.maven.org).
- В вашем выводе упоминается ошибка
-
Замещение прокси:
- Если возможно, попробуйте временно использовать другой прокси для диагностики этой проблемы. Это поможет определить, действительно ли проблема кроется в конфигурации текущего прокси.
Заключение
Для дальнейшей диагностики вам стоит связаться с администратором прокси-сервера. Возможно, они смогут предоставить дополнительную информацию о работе системы и ее настройках. Исследовав указанные аспекты, вы сможете более точно определить источник проблемы и найти соответствующее решение.