Тайм-ауты прокси в curl: на каком этапе произошёл сбой
Разделите подключение к прокси, согласование туннеля, TLS и зависший ответ, чтобы ограничения времени curl помогли найти причину.
Найдите последнюю завершённую операцию в подробном выводе curl. «Соединение с прокси установлено, но ответа CONNECT нет» сужает круг причин гораздо сильнее, чем «тайм-аут прокси».
Используйте запрос с ограничением времени, заменив локальный пример своим HTTP-прокси; в списке HTTP-прокси можно найти другие узлы для сравнения:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/--connect-timeout 5 задаёт единый запас времени на установление соединения, включая необходимые поиски и рукопожатия; это не пять секунд на каждый этап. --max-time 15 ограничивает всю операцию, включая передачу после установления соединения.
| Где останавливается выполнение | Что проверить дальше |
|---|---|
| Нет соединения с прокси | Разрешение имени прокси, прослушиваемый порт, маршрутизацию и правила межсетевого экрана. |
| Прокси подключён; ответа на туннель нет | Нагрузку прокси, согласование аутентификации, политику доступа и доступность назначения со стороны прокси. |
| Туннель принят; TLS не завершён | Доступность назначения, согласование TLS и управляемый перехват трафика. |
| Заголовки назначения получены; тело не передаётся | Поведение исходного сервера при передаче, буферизацию посредниками и намеренные периоды молчания приложения. |
Порядок рукопожатий описан в статье как CONNECT переносит HTTPS. Остановка около предела времени соединения указывает на этап установления; более поздняя остановка на общем пределе — на незавершённую передачу. Рассматривайте последовательность вместе со временем: одно время не определяет виновный компонент. Формулировки журналов различаются между сборками curl, а открытый TCP-порт не доказывает работоспособность CONNECT.
Оставьте одну сторону неизменной
Сравните обращение к тому же назначению по разрешённому прямому маршруту:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Затем сравните другое безвредное назначение через тот же прокси. Если сбой только у одного адресата, изучите его маршрут или политику доступа. Если все останавливаются на одном этапе установления, изучите общий путь через прокси. Сохраните время начала, узел прокси, назначение и последний завершённый этап; перед передачей журналов удалите учётные данные, токены, cookie и частные имена.
Когда соединение открыто, но полезного продвижения нет
Для передачи файла помимо ограничений установления и общей длительности может понадобиться порог низкой скорости:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 60 --speed-limit 100 --speed-time 20 https://example.com/Это прерывает операцию, если устойчивая скорость передачи остаётся ниже 100 байт в секунду в течение 20 секунд, сохраняя общий предел 60 секунд. Подбирайте значения под нагрузку. Поток событий может нормально работать при долгих паузах, поэтому правило для загрузки способно прервать его ошибочно.
Увеличение всех пределов откладывает проявление симптома. Немедленные повторные попытки могут добавить соединения на перегруженный путь. Для диагностики выполните несколько продуманных сравнений; последующая политика повторов приложения требует собственного общего запаса времени и оценки безопасности повторения операции.