דף האינטרנט הפנימי שנפתח בדפדפן מוכיח רק שהפרוקסי עובד עבור הדפדפן, לא עבור 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 תראו איזה קובץ סיפק כל ערך אפקטיבי. ייצוא shell כמו npm_config_proxy יכול לעקוף את הקובץ, וקובץ .npmrc ברמת פרויקט עם סיסמה אישית לא אמור להיות מקומט לעולם. הדפיסו את נתיב המקור יחד עם הערך.

השאירו את strict-ssl פעיל. פרוקסי שבוחן TLS עשוי לדרוש CA ארגוני במאגר האמון; כיבוי האימות כדי לעקוף את השגיאה מסתיר את בעיית האמון האמיתית.

Maven מפריד בין פרוקסי למראות

Maven קורא פרוקסי ומראות מקובץ ההגדרות של המשתמש, לא מה-pom של הפרויקט. שימו פרוקסי רשת ומראות של המאגר הפנימי ב-~/.m2/settings.xml, והשאירו הצהרות מאגר ציבוריות בפרויקט.

בלוק הפרוקסי צריך id, דגל פעיל, פרוטוקול, מארח ופורט, ורשומת nonProxyHosts עבור המאגר הפנימי. החזיקו את השדות בקובץ המשתמש, לא ב-pom, כדי ששינוי רשת לא ישכתב את הבנייה של כל הצוות.

הוסיפו את המאגר הפנימי ל-nonProxyHosts כדי ש-Maven יתחבר ישירות. בלי הרשומה הזו הפרוקסי הופך לתחנה מיותרת והכשל נראה כמו נפילת מאגר. רשומת מראה מצביעה על המאגר הפנימי ואינה מחליפה את הגדרת הפרוקסי.

מפתחים שעוברים בין רשתות יכולים להחזיק קובץ הגדרות לכל רשת ולבחור את העותק הנכון כשהקליפה עולה. עריכה ידנית של קובץ אחד בכל מעבר הופכת מחשב נייד עובד לכרטיס תמיכה.

ל-VS Code ולמכולות dev יש מרחבי שמות שונים

VS Code קורא את http.proxy מהגדרות המשתמש או סביבת העבודה, כולל סכימה ופורט. זה מכסה את בקשות העורך לתוספים ולשוק, אבל לא מגדיר מסוף או מכולה שהופעלה מהעורך. בדקו גם את היקף ההגדרה וגם את הערך. הגדרת סביבת עבודה יכולה לעקוף את הגדרת המשתמש עבור פרויקט אחד.

למכולת dev יש מרחב שמות רשת משלה. היא לא יורשת את משתני הפרוקסי של המארח ולא את נתיב ה-VPN, ולכן קריאה לשוק בתוך המכולה עלולה להיכשל בעוד אותה קריאה עובדת במארח.

תנו למכולה את המשתנים האלה, או תנו לה resolver ונתיב משלה. כששמות נפתרים בפנים אבל הפרוקסי לא עונה לעולם, החלק החסר הוא בדרך כלל הנתיב, לא הכתובת.

רשימות עקיפה וקדימות הסביבה

הוסיפו את שער ה-VPN, רישומים פנימיים וסיומות DNS פרטיות לרשימת העקיפה. אם הלקוח מנסה להגיע לשער דרך הפרוקסי לפני שהמנהרה קיימת, החיבור נכשל כך שזה נראה כמו נפילת פרוקסי. בדקו את העקיפה כשהמנהרה למטה.

משתני סביבה וקבצים יכולים לסתור זה את זה. הריצו את דאמפ התצורה של הכלי, לא של הקליפה, והשוו את הערכים. משתנה כפול באותיות קטנות, ערך ישן בקליפת אב או קובץ פרויקט יכולים לגבור על ההגדרה שזה עתה ערכתם.

ב-CI העבירו את הפרוקסי כמשתנה סודי ובדקו התקנת חבילה אחת באותה תמונה. 407 בתוך מכולה אומר לרוב שהמשתנה פשוט חסר שם, בעוד בקליפת המארח הוא קיים.

רשמו מארח, פורט, סיומות עקיפה והקובץ או המשתנה שמספק אותם לכל כלי. כשלקוח אחד מחזיר 407 ואחר עובד, הרשומה הזו הופכת השוואה של ארבע תצורות לבדיקה קצרה.

מאמרים קשורים