407 în spatele proxy-ului VPN corporativ: npm, Maven și VS Code
Un 407 înseamnă că proxy-ul cere acreditări, nu că registrul a căzut. Configurați npm, Maven, VS Code și containerele, și excludeți hosturile interne.
Faptul că pagina internă se deschide în browser dovedește doar că proxy-ul funcționează pentru browser, nu pentru npm sau Maven. Fiecare client își citește propria configurație, iar o rețea accesibilă doar prin VPN adaugă o a doua întrebare: dacă clientul ajunge la proxy. Începeți cu codul de stare și urmați lanțul de configurare al instrumentului care a eșuat. De aceea un client funcționează, iar vecinul lui nu.
Ce dovedește de fapt un 407
Un 407 Proxy Authentication Required vine de la proxy, nu de la registru sau de la depozit. Clientul a ajuns la proxy, iar proxy-ul a refuzat cererea, de obicei pentru că acreditările lipseau, erau prost formatate sau nu erau acceptate pentru acea destinație.
Un timeout spune altă poveste: adresă de proxy greșită, nicio rută către proxy înainte de ridicarea tunelului sau o intrare de ocolire lipsă pentru un host intern. Citiți textul erorii înainte de a schimba acreditările.
Verificați hostul, portul, schema de autentificare și dacă numele de utilizator are nevoie de un prefix de domeniu. Apoi verificați dacă instrumentul citește valoarea dintr-un fișier, dintr-o variabilă de mediu sau din ambele. Un nume cu domeniu este o cauză frecventă de 407, la fel ca o parolă salvată cu o codare greșită.
npm își citește propriul lanț de configurare
npm acceptă cheile proxy și https-proxy într-un .npmrc al utilizatorului sau al proiectului. Indicați schema, pentru că valorile sunt URL-uri, și codificați caracterele rezervate din parolă astfel încât un semn at să nu împartă valoarea.
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true
Cu npm config list vedeți ce fișier a furnizat fiecare valoare efectivă. Un export de shell precum npm_config_proxy poate suprascrie fișierul, iar un .npmrc de proiect cu o parolă personală nu ar trebui comis niciodată. Afișați calea sursei împreună cu valoarea.
Lăsați strict-ssl activat. Un proxy care inspectează TLS poate cere CA-ul companiei în magazinul de încredere; dezactivarea verificării pentru a ocoli eroarea ascunde problema reală de încredere.
Maven separă proxy-urile de oglinzi
Maven citește proxy-uri și oglinzi din fișierul de setări al utilizatorului, nu din pom-ul proiectului. Puneți proxy-urile de rețea și oglinzile depozitului intern în ~/.m2/settings.xml, și lăsați declarațiile publice în proiect.
Blocul de proxy are nevoie de un id, un steag de activare, protocolul, hostul și portul, și o intrare nonProxyHosts pentru depozitul intern. Țineți aceste câmpuri în fișierul utilizatorului, nu în pom, ca o schimbare de rețea să nu rescrie build-ul întregii echipe.
Adăugați depozitul intern la nonProxyHosts ca Maven să se conecteze direct. Fără acea intrare proxy-ul devine o oprire inutilă, iar eșecul arată ca o cădere a depozitului. Intrarea de oglindă indică depozitul intern și nu înlocuiește setarea de proxy.
Cei care schimbă rețelele pot păstra un fișier de setări pentru fiecare rețea și pot alege copia corectă la pornirea shell-ului. Editarea manuală a unui singur fișier la fiecare mutare transformă un laptop funcțional într-un tichet de suport.
VS Code și containerele dev au spații de nume diferite
VS Code citește http.proxy din setările utilizatorului sau ale spațiului de lucru, inclusiv schema și portul. Asta acoperă cererile editorului către extensii și marketplace, dar nu configurează un terminal sau un container pornit din editor. Verificați domeniul setării și valoarea. O setare de spațiu de lucru poate suprascrie setarea utilizatorului pentru un proiect.
Un container dev are propriul spațiu de nume de rețea. Nu moștenește variabilele de proxy ale hostului sau ruta VPN, de aceea un apel la marketplace poate eșua în container în timp ce același apel funcționează pe host.
Dați containerului acele variabile, sau dați-i propriul resolver și propria rută. Când numele se rezolvă înăuntru, dar proxy-ul nu răspunde niciodată, lipsește de obicei ruta, nu adresa.
Liste de ocolire și precedența mediului
Adăugați gateway-ul VPN, registrele interne și sufixele DNS private la lista de ocolire. Dacă clientul încearcă să ajungă la gateway prin proxy înainte ca tunelul să existe, conexiunea eșuează în așa fel încât pare o cădere a proxy-ului. Testați asta cu tunelul coborât.
Variabilele de mediu și fișierele pot fi în dezacord. Rulați dump-ul de configurare al instrumentului, nu al shell-ului, și comparați valorile. O variabilă duplicată cu litere mici, o valoare veche într-un shell părinte sau un fișier de proiect pot învinge setarea pe care tocmai ați modificat-o.
În CI transmiteți proxy-ul ca variabilă secretă și testați instalarea unui pachet în aceeași imagine. Un 407 într-un container înseamnă adesea că variabila pur și simplu lipsește acolo, în timp ce shell-ul hostului o are.
Notați hostul și portul proxy-ului, sufixele de ocolire și fișierul sau variabila care le furnizează pentru fiecare instrument. Când un client returnează 407 și altul funcționează, acea notă transformă comparația a patru configurații într-o verificare scurtă.