407 di balik proxy VPN perusahaan: npm, Maven, dan VS Code
407 berarti proxy meminta kredensial, bukan bahwa registri sedang mati. Konfigurasikan npm, Maven, VS Code dan kontainer, lalu kecualikan hos internal.
Halaman intranet yang terbuka di peramban hanya membuktikan bahwa proxy bekerja untuk peramban, bukan untuk npm atau Maven. Setiap klien membaca konfigurasinya sendiri, dan jaringan yang hanya bisa dijangkau lewat VPN menambah pertanyaan kedua: apakah klien mencapai proxy sama sekali. Mulailah dari kode status, lalu ikuti rantai konfigurasi alat yang gagal. Karena itu satu klien bekerja sementara tetangganya gagal.
Apa yang sebenarnya dibuktikan 407
407 Proxy Authentication Required datang dari proxy, bukan dari registri atau repositori. Klien sudah mencapai proxy dan proxy menolak permintaan itu, biasanya karena kredensial tidak ada, formatnya salah atau tidak diterima untuk tujuan tersebut.
Batas waktu bercerita lain: alamat proxy salah, tidak ada rute ke proxy sebelum terowongan berdiri, atau entri pengabaian yang hilang untuk hos internal. Baca teks galat sebelum mengubah kredensial.
Pastikan hos, porta, skema autentikasi dan apakah nama pengguna perlu awalan domain. Lalu periksa apakah alat yang gagal membaca nilai itu dari berkas, variabel lingkungan atau keduanya. Nama dengan domain adalah penyebab 407 yang umum, begitu juga kata sandi yang disimpan dengan pengodean salah.
npm membaca rantai konfigurasinya sendiri
npm menerima kunci proxy dan https-proxy di .npmrc pengguna atau proyek. Sertakan skema, karena nilainya adalah URL, dan enkodekan karakter khusus di kata sandi agar tanda at tidak memecah nilai.
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true
Dengan npm config list Anda melihat berkas mana yang memberi setiap nilai efektif. Ekspor shell seperti npm_config_proxy bisa menimpa berkas itu, dan .npmrc tingkat proyek dengan kata sandi pribadi tidak boleh pernah di-commit. Cetak jalur sumber bersama nilainya.
Biarkan strict-ssl aktif. Proxy yang memeriksa TLS mungkin meminta CA perusahaan di penyimpanan kepercayaan; mematikan verifikasi untuk melewati galat justru menyembunyikan masalah kepercayaan yang sebenarnya.
Maven memisahkan proxy dari cermin
Maven membaca proxy dan cermin dari berkas pengaturan pengguna, bukan dari pom proyek. Taruh proxy khusus jaringan dan cermin repositori internal di ~/.m2/settings.xml, dan biarkan deklarasi repositori publik di proyek.
Blok proxy memerlukan id, penanda aktif, protokol, hos dan porta, serta entri nonProxyHosts untuk repositori internal. Simpan kolom itu di berkas pengguna, bukan di pom, agar perubahan jaringan tidak menulis ulang build seluruh tim.
Tambahkan repositori internal ke nonProxyHosts agar Maven terhubung langsung. Tanpa entri itu proxy menjadi pemberhentian yang tidak perlu dan kegagalan tampak seperti repositori mati. Entri cermin menunjuk ke repositori internal dan tidak menggantikan pengaturan proxy.
Pengembang yang berpindah jaringan dapat menyimpan satu berkas pengaturan per jaringan dan memilih salinan yang tepat saat shell mulai. Mengedit satu berkas dengan tangan di setiap perpindahan membuat laptop yang berfungsi menjadi tiket dukungan.
VS Code dan kontainer dev punya ruang nama berbeda
VS Code membaca http.proxy dari pengaturan pengguna atau ruang kerja, termasuk skema dan porta. Itu mencakup permintaan ekstensi dan pasar dari editor, tetapi tidak mengonfigurasi terminal atau kontainer yang dijalankan dari editor. Periksa cakupan pengaturan sekaligus nilainya. Pengaturan ruang kerja dapat menimpa pengaturan pengguna untuk satu proyek.
Kontainer dev punya ruang nama jaringannya sendiri. Ia tidak mewarisi variabel proxy atau rute VPN hos, karena itu panggilan ke pasar bisa gagal di dalam kontainer sementara panggilan yang sama berfungsi di hos.
Beri kontainer variabel itu, atau beri resolver dan rutenya sendiri. Ketika nama terurai di dalam tetapi proxy tidak pernah menjawab, bagian yang hilang biasanya rute, bukan alamat.
Daftar pengabaian dan prioritas lingkungan
Tambahkan gerbang VPN, registri internal dan sufiks DNS privat ke daftar pengabaian. Jika klien mencoba mencapai gerbang lewat proxy sebelum terowongan ada, koneksi gagal dengan cara yang tampak seperti proxy mati. Uji pengabaian itu dengan terowongan turun.
Variabel lingkungan dan berkas bisa berselisih. Jalankan dump konfigurasi alat itu sendiri, bukan milik shell, dan bandingkan nilainya. Variabel duplikat huruf kecil, nilai lama di shell induk atau berkas proyek dapat mengalahkan pengaturan yang baru Anda ubah.
Di CI teruskan proxy sebagai variabel rahasia dan uji pemasangan satu paket di image yang sama. 407 di dalam kontainer sering berarti variabel itu memang tidak ada di sana, sementara shell hos memilikinya.
Catat hos dan porta proxy, sufiks pengabaian serta berkas atau variabel yang memberikannya untuk setiap alat. Ketika satu klien mengembalikan 407 dan yang lain bekerja, catatan itu mengubah perbandingan empat konfigurasi berbeda menjadi pemeriksaan singkat.