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 คุณเห็นว่าไฟล์ใดให้ค่าeffectiveแต่ละค่า การ export ของ shell เช่น npm_config_proxy สามารถเขียนทับไฟล์ได้ และ .npmrc ระดับโปรเจกต์ที่มีรหัสผ่านส่วนตัวไม่ควร commit พิมพ์เส้นทางต้นทางพร้อมค่า
เปิด strict-ssl ไว้ พร็อกซีที่ตรวจสอบ TLS อาจต้องใช้ CA ขององค์กรในที่เก็บความเชื่อถือ การปิดการตรวจสอบเพื่อเลี่ยงข้อผิดพลาดกลับซ่อนปัญหาความเชื่อถือจริง
Maven แยกพร็อกซีออกจากมิเรอร์
Maven อ่านพร็อกซีและมิเรอร์จากไฟล์ settings ของผู้ใช้ ไม่ใช่จาก pom ของโปรเจกต์ วางพร็อกซีเฉพาะเครือข่ายและมิเรอร์ของที่เก็บภายในไว้ใน ~/.m2/settings.xml และเก็บประกาศที่เก็บสาธารณะไว้ในโปรเจกต์
บล็อกพร็อกซีต้องมี id ธงการใช้งาน โปรโตคอล โฮสต์และพอร์ต และรายการ nonProxyHosts สำหรับที่เก็บภายใน เก็บฟิลด์เหล่านี้ในไฟล์ผู้ใช้ ไม่ใช่ pom เพื่อให้การเปลี่ยนเครือข่ายไม่เขียน build ของทั้งทีมใหม่
เพิ่มที่เก็บภายในใน nonProxyHosts เพื่อให้ Maven เชื่อมต่อโดยตรง หากไม่มีรายการนั้นพร็อกซีจะกลายเป็นจุดหยุดที่ไม่จำเป็นและความล้มเหลวดูเหมือนที่เก็บล่ม รายการมิเรอร์ชี้ไปที่ที่เก็บภายในและไม่แทนที่การตั้งค่าพร็อกซี
นักพัฒนาที่สลับเครือข่ายสามารถเก็บไฟล์ settings หนึ่งไฟล์ต่อเครือข่ายและเลือกสำเนาที่ถูกต้องเมื่อ shell เริ่ม การแก้ไฟล์เดียวด้วยมือทุกครั้งทำให้แล็ปท็อปที่ใช้งานได้กลายเป็นตั๋วขอความช่วยเหลือ
VS Code และคอนเทนเนอร์ dev มีเนมสเปซต่างกัน
VS Code อ่าน http.proxy จาก settings ของผู้ใช้หรือเวิร์กสเปซ รวมถึงสคีมาและพอร์ต ครอบคลุมคำขอของเอดิเตอร์ไปยังส่วนขยายและมาร์เก็ตเพลส แต่ไม่ได้กำหนดค่าเทอร์มินัลหรือคอนเทนเนอร์ที่เริ่มจากเอดิเตอร์ ตรวจสอบขอบเขตของ settings และค่าด้วย settings ของเวิร์กสเปซสามารถเขียนทับของผู้ใช้สำหรับโปรเจกต์เดียว
คอนเทนเนอร์ dev มีเนมสเปซเครือข่ายของตัวเอง ไม่สืบทอดตัวแปรพร็อกซีหรือเส้นทาง VPN ของโฮสต์ ดังนั้น การเรียกมาร์เก็ตเพลสภายในคอนเทนเนอร์อาจล้มเหลว ขณะที่การเรียกเดียวกันทำงานบนโฮสต์
ให้ตัวแปรเหล่านั้นกับคอนเทนเนอร์ หรือให้ resolver และเส้นทางของตัวเอง เมื่อชื่อถูกแก้ภายในแต่พร็อกซีไม่ตอบเลย ส่วนที่ขาดมักเป็นเส้นทาง ไม่ใช่ที่อยู่
รายการข้ามและลำดับความสำคัญของสภาพแวดล้อม
เพิ่มเกตเวย์ VPN รีจิสทรีภายใน และส่วนต่อท้าย DNS ส่วนตัวในรายการข้าม หากไคลเอนต์พยายามไปถึงเกตเวย์ผ่านพร็อกซีก่อนอุโมงค์จะมีอยู่ การเชื่อมต่อจะล้มเหลวจนดูเหมือนพร็อกซีล่ม ทดสอบสิ่งนั้นโดยปิดอุโมงค์
ตัวแปรสภาพแวดล้อมและไฟล์อาจขัดกัน รัน dump การกำหนดค่าของเครื่องมือ ไม่ใช่ของ shell แล้วเปรียบเทียบค่า ตัวแปรซ้ำด้วยตัวพิมพ์เล็ก ค่าเก่าใน shell แม่ หรือไฟล์โปรเจกต์สามารถเอาชนะ settings ที่เพิ่งแก้ไข
ใน CI ส่งพร็อกซีเป็นตัวแปรลับและทดสอบการติดตั้งแพ็กเกจหนึ่งรายการใน image เดียวกัน 407 ในคอนเทนเนอร์มักหมายความว่าตัวแปรไม่มีอยู่ที่นั่น ขณะที่ shell ของโฮสต์มี
บันทึกโฮสต์ พอร์ต ส่วนต่อท้ายข้าม และไฟล์หรือตัวแปรที่ให้สิ่งเหล่านั้นสำหรับแต่ละเครื่องมือ เมื่อไคลเอนต์หนึ่งคืน 407 และอีกตัวทำงาน บันทึกนั้นเปลี่ยนการเปรียบเทียบการกำหนดค่าสี่แบบให้เป็นการตรวจสอบสั้น ๆ