407 зад корпоративния VPN прокси: npm, Maven и VS Code
407 означава, че проксито иска идентификационни данни, а не че регистърът е паднал. Настройте npm, Maven, VS Code и контейнерите и изключете вътрешните хостове.
Успешната вътрешна страница в браузъра доказва само, че проксито работи за браузъра, не за 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 на проекта, за да не преписва смяна на мрежата билда на целия екип. Записът за огледало е отделен и насочва Maven към вътрешното хранилище.
Добавете вътрешното хранилище в nonProxyHosts, за да се свързва Maven директно. Без този запис проксито става излишна спирка и отказът изглежда като прекъсване на хранилището. Записът за огледало сочи към вътрешното хранилище и не замества настройката за прокси.
Разработчиците, които сменят мрежи, могат да поддържат по един файл с настройки за мрежа и да избират правилното копие при стартиране на обвивката. Ръчното редактиране на един файл при всеки преход превръща работещ лаптоп в заявка за поддръжка.
VS Code и dev контейнерите имат различни пространства от имена
VS Code чете http.proxy от потребителските или работните настройки, включително схемата и порта. Това покрива заявките на редактора към разширения и пазара, но не настройва терминал или контейнер, стартиран от редактора. Проверете обхвата на настройката и стойността. Настройка на работното пространство може да отмени потребителската за един проект.
dev контейнерът има собствено мрежово пространство от имена. Той не наследява прокси променливите на хоста или неговия VPN маршрут, затова извикване към пазара вътре в контейнера може да се провали, докато същото извикване на хоста работи.
Дайте на контейнера тези променливи или собствен резолвер и маршрут. Когато имената се решават вътре, но проксито никога не отговаря, липсващата част обикновено е пътят, не адресът.
Списъци за заобикаляне и приоритет на средата
Добавете VPN шлюза, вътрешните регистри и частните DNS суфикси в списъка за заобикаляне. Ако клиентът опита да достигне VPN шлюза през проксито преди тунелът да съществува, връзката се проваля така, че изглежда като отказ на проксито. Тествайте това заобикаляне с изключен тунел.
Променливите на средата и файловете могат да се разминават. Пуснете собствения дамп на настройките на инструмента, не този на обвивката, и сравнете стойностите. Дублирана променлива с малки букви, остаряла стойност в родителска обвивка или файл на проекта могат да надделеят над току-що променената настройка.
В CI подайте проксито като тайна променлива и тествайте инсталиране на един пакет в същия образ. 407 вътре в контейнер често означава, че променливата просто липсва там, докато обвивката на хоста я има.
Записвайте хоста на проксито, порта, суфиксите за заобикаляне и файла или променливата, която ги подава, за всеки инструмент. Когато един клиент връща 407, а друг работи, този запис превръща сравнението на четири различни конфигурации в кратка проверка.