То, что внутренняя страница открывается в браузере, доказывает лишь работу прокси для браузера, а не для npm или Maven. Каждый клиент читает свою конфигурацию, и сеть, доступная только через VPN, добавляет второй вопрос: доходит ли клиент до прокси вообще. Начните с кода состояния, затем проследите цепочку настроек инструмента, который сбоил. Поэтому один клиент работает, а соседний нет.

Что на самом деле доказывает 407

407 Proxy Authentication Required приходит от прокси, а не от реестра или репозитория. Клиент дошёл до прокси, и прокси отклонил запрос, обычно потому что учётные данные отсутствовали, были неверно оформлены или не принимались для этой цели.

Тайм-аут рассказывает другое: неверный адрес прокси, нет маршрута до прокси до поднятия туннеля или отсутствует запись обхода для внутреннего хоста. Прочитайте текст ошибки, прежде чем менять учётные данные.

Проверьте хост, порт, схему аутентификации и нужен ли имени пользователя префикс домена. Затем посмотрите, читает ли инструмент значение из файла, переменной окружения или из обоих. Имя с доменом — частая причина 407, как и пароль, сохранённый в неверной кодировке.

npm читает свою цепочку настроек

npm принимает ключи proxy и https-proxy в .npmrc пользователя или проекта. Укажите схему, потому что значения — это URL, и закодируйте зарезервированные символы пароля, чтобы знак at не разбивал значение.

proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true

С npm config list видно, какой файл дал каждое действующее значение. Экспорт оболочки вроде npm_config_proxy может перекрыть файл, а проектный .npmrc с личным паролем не должен попадать в коммит. Печатайте путь источника вместе со значением.

Оставьте strict-ssl включённым. Прокси, проверяющий TLS, может требовать корпоративный CA в хранилище доверия; отключение проверки ради обхода ошибки скрывает настоящую проблему доверия.

Maven разделяет прокси и зеркала

Maven читает прокси и зеркала из пользовательского файла настроек, а не из pom проекта. Сетевые прокси и зеркала внутреннего репозитория положите в ~/.m2/settings.xml, а публичные объявления репозиториев оставьте в проекте.

Блоку прокси нужны id, флаг активности, протокол, хост и порт, а также запись nonProxyHosts для внутреннего репозитория. Держите эти поля в пользовательском файле, а не в pom, чтобы смена сети не переписывала сборку всей команды.

Добавьте внутренний репозиторий в nonProxyHosts, чтобы Maven подключался напрямую. Без этой записи прокси становится лишней остановкой, и сбой выглядит как недоступность репозитория. Запись зеркала указывает на внутренний репозиторий и не заменяет настройку прокси.

Разработчики, переезжающие между сетями, могут держать по одному файлу настроек на сеть и выбирать нужную копию при старте оболочки. Ручная правка одного файла при каждом переходе превращает работающий ноутбук в заявку в поддержку.

У VS Code и dev-контейнеров разные пространства имён

VS Code читает http.proxy из настроек пользователя или рабочей области, включая схему и порт. Это покрывает запросы редактора к расширениям и маркетплейсу, но не настраивает терминал или контейнер, запущенный из редактора. Проверьте область действия настройки и значение. Настройка рабочей области может перекрыть пользовательскую для одного проекта.

У dev-контейнера своё сетевое пространство имён. Он не наследует переменные прокси и VPN-маршрут хоста, поэтому вызов маркетплейса внутри контейнера может сбоить, тогда как тот же вызов на хосте работает.

Дайте контейнеру эти переменные или собственный резолвер и маршрут. Когда имена внутри разрешаются, но прокси никогда не отвечает, обычно не хватает маршрута, а не адреса.

Списки обхода и приоритет окружения

Добавьте VPN-шлюз, внутренние реестры и частные суффиксы DNS в список обхода. Если клиент пытается достичь шлюза через прокси до появления туннеля, соединение сбоит так, что это похоже на отказ прокси. Проверьте это при опущенном туннеле.

Переменные окружения и файлы могут расходиться. Запустите собственный дамп настроек инструмента, а не оболочки, и сравните значения. Дублирующая переменная строчными буквами, старое значение в родительской оболочке или файл проекта могут перевесить только что изменённую настройку.

В CI передайте прокси секретной переменной и проверьте установку одного пакета в том же образе. 407 внутри контейнера часто означает, что переменной там просто нет, хотя в оболочке хоста она есть.

Запишите хост и порт прокси, суффиксы обхода и файл или переменную, которая их задаёт, для каждого инструмента. Когда один клиент возвращает 407, а другой работает, эта запись превращает сравнение четырёх конфигураций в короткую проверку.

Похожие статьи