407 za firmowym proxy VPN: npm, Maven i VS Code
407 oznacza, że proxy chce danych logowania, a nie że rejestr padł. Skonfiguruj npm, Maven, VS Code i kontenery oraz wyklucz hosty wewnętrzne.
To, że strona intranetowa otwiera się w przeglądarce, dowodzi tylko, że proxy działa dla przeglądarki, a nie dla npm czy Maven. Każdy klient czyta własną konfigurację, a sieć dostępna wyłącznie przez VPN dodaje drugie pytanie: czy klient w ogóle dociera do proxy. Zacznij od kodu stanu, a potem prześledź łańcuch konfiguracji narzędzia, które zawiodło. Dlatego jeden klient działa, a sąsiedni nie.
Co naprawdę dowodzi 407
407 Proxy Authentication Required pochodzi od proxy, nie od rejestru ani repozytorium. Klient dotarł do proxy, a proxy odrzuciło żądanie, zwykle dlatego że brakowało danych logowania, były źle sformatowane lub nie zostały przyjęte dla tego celu.
Przekroczenie czasu mówi co innego: zły adres proxy, brak trasy do proxy przed postawieniem tunelu albo brak wpisu obejścia dla hosta wewnętrznego. Przeczytaj treść błędu, zanim zmienisz dane logowania.
Sprawdź host, port, schemat uwierzytelniania i to, czy nazwa użytkownika wymaga prefiksu domeny. Potem sprawdź, czy narzędzie czyta wartość z pliku, ze zmiennej środowiskowej czy z obu. Nazwa z domeną to częsta przyczyna 407, podobnie jak hasło zapisane w złym kodowaniu.
npm czyta własny łańcuch konfiguracji
npm przyjmuje klucze proxy i https-proxy w pliku .npmrc użytkownika lub projektu. Podaj schemat, bo wartości są adresami URL, i zakoduj zarezerwowane znaki w haśle, aby znak at nie dzielił wartości.
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true
Dzięki npm config list widzisz, który plik dał każdą efektywną wartość. Eksport powłoki taki jak npm_config_proxy może przesłonić plik, a projektowy .npmrc z prywatnym hasłem nigdy nie powinien być commitowany. Wypisz ścieżkę źródła razem z wartością.
Zostaw strict-ssl włączone. Proxy sprawdzające TLS może wymagać firmowego CA w magazynie zaufania; wyłączenie weryfikacji, by obejść błąd, ukrywa prawdziwy problem zaufania.
Maven rozdziela proxy od luster
Maven czyta proxy i lustra z pliku ustawień użytkownika, a nie z pom projektu. Sieciowe proxy i lustra wewnętrznego repozytorium umieść w ~/.m2/settings.xml, a publiczne deklaracje repozytoriów zostaw w projekcie.
Blok proxy wymaga id, flagi aktywności, protokołu, hosta i portu oraz wpisu nonProxyHosts dla wewnętrznego repozytorium. Trzymaj te pola w pliku użytkownika, a nie w pom, żeby zmiana sieci nie przepisywała builda całego zespołu.
Dodaj wewnętrzne repozytorium do nonProxyHosts, aby Maven łączył się bezpośrednio. Bez tego wpisu proxy staje się zbędnym przystankiem, a awaria wygląda jak przerwa w repozytorium. Wpis lustra wskazuje wewnętrzne repozytorium i nie zastępuje ustawienia proxy.
Programiści przechodzący między sieciami mogą trzymać jeden plik ustawień na sieć i wybierać właściwą kopię przy starcie powłoki. Ręczne poprawianie jednego pliku przy każdej zmianie zamienia działający laptop w zgłoszenie do wsparcia.
VS Code i kontenery dev mają różne przestrzenie nazw
VS Code czyta http.proxy z ustawień użytkownika lub obszaru roboczego, wraz ze schematem i portem. Obejmuje to żądania edytora do rozszerzeń i marketplace, ale nie konfiguruje terminala ani kontenera uruchomionego z edytora. Sprawdź zakres ustawienia i wartość. Ustawienie obszaru roboczego może przesłonić ustawienie użytkownika dla jednego projektu.
Kontener dev ma własną przestrzeń nazw sieci. Nie dziedziczy zmiennych proxy ani trasy VPN hosta, dlatego wywołanie marketplace w kontenerze może zawieść, podczas gdy to samo wywołanie na hoście działa.
Daj kontenerowi te zmienne albo własny resolver i trasę. Gdy nazwy rozwiązują się wewnątrz, ale proxy nigdy nie odpowiada, brakuje zwykle trasy, a nie adresu.
Listy obejść i priorytet środowiska
Dodaj bramę VPN, wewnętrzne rejestry i prywatne sufiksy DNS do listy obejść. Jeśli klient próbuje dotrzeć do bramy przez proxy, zanim powstanie tunel, połączenie zawodzi tak, że wygląda to na awarię proxy. Przetestuj to przy opuszczonym tunelu.
Zmienne środowiskowe i pliki mogą się nie zgadzać. Uruchom zrzut konfiguracji narzędzia, a nie powłoki, i porównaj wartości. Zduplikowana zmienna małymi literami, stara wartość w powłoce nadrzędnej lub plik projektu mogą przeważyć nad właśnie zmienionym ustawieniem.
W CI przekaż proxy jako zmienną tajną i przetestuj instalację jednego pakietu w tym samym obrazie. 407 w kontenerze często oznacza, że zmiennej tam po prostu nie ma, a powłoka hosta ją ma.
Zapisz host i port proxy, sufiksy obejść oraz plik lub zmienną, która je dostarcza, dla każdego narzędzia. Gdy jeden klient zwraca 407, a drugi działa, ta notatka zamienia porównanie czterech konfiguracji w krótkie sprawdzenie.