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 میبینید هر مقدار مؤثر از کدام فایل آمده است. یک export پوسته مانند npm_config_proxy میتواند فایل را زیر پا بگذارد و .npmrc سطح پروژه با گذرواژه شخصی هرگز نباید کامیت شود. مسیر منبع را همراه مقدار چاپ کنید.
strict-ssl را روشن نگه دارید. پراکسیای که TLS را بازرسی میکند ممکن است CA سازمانی در مخزن اعتماد بخواهد؛ خاموش کردن بررسی برای دور زدن خطا مشکل واقعی اعتماد را پنهان میکند.
Maven پراکسیها را از آینهها جدا میکند
Maven پراکسیها و آینهها را از فایل تنظیمات کاربر میخواند، نه از pom پروژه. پراکسیهای وابسته به شبکه و آینههای مخزن داخلی را در ~/.m2/settings.xml بگذارید و اعلان مخزنهای عمومی را در پروژه نگه دارید.
بلوک پراکسی به id، پرچم فعال بودن، پروتکل، میزبان و درگاه و مدخل nonProxyHosts برای مخزن داخلی نیاز دارد. این فیلدها را در فایل تنظیمات کاربر بگذارید نه در pom پروژه، تا تغییر شبکه ساخت کل تیم را بازنویسی نکند.
مخزن داخلی را به nonProxyHosts اضافه کنید تا Maven مستقیم وصل شود. بدون این مدخل پراکسی یک توقف بیمورد میشود و خطا شبیه قطع مخزن دیده میشود. مدخل آینه به مخزن داخلی اشاره میکند و جای تنظیم پراکسی را نمیگیرد.
توسعهدهندگانی که بین شبکهها جابهجا میشوند میتوانند برای هر شبکه یک فایل تنظیمات نگه دارند و هنگام آغاز پوسته نسخه درست را انتخاب کنند. ویرایش دستی یک فایل در هر جابهجایی یک لپتاپ سالم را به تیکت پشتیبانی تبدیل میکند.
VS Code و کانتینرهای توسعه فضای نام جدا دارند
VS Code مقدار http.proxy را از تنظیمات کاربر یا فضای کار میخواند، همراه با طرح و درگاه. این درخواستهای افزونه و بازار خود ویرایشگر را پوشش میدهد، اما ترمینال یا کانتینری که از ویرایشگر اجرا شود را خودکار پیکربندی نمیکند. دامنه تنظیم و مقدار را با هم بررسی کنید. تنظیم فضای کار میتواند برای یک پروژه بر تنظیم کاربر چیره شود.
کانتینر توسعه فضای نام شبکه خودش را دارد. متغیرهای پراکسی میزبان یا مسیر VPN آن را به ارث نمیبرد، از این رو فراخوانی بازار درون کانتینر میتواند شکست بخورد در حالی که همان فراخوانی روی میزبان کار میکند.
آن متغیرها را به کانتینر بدهید، یا به آن resolver و مسیر خودش را بدهید. وقتی نامها درون آن حل میشوند اما پراکسی هرگز پاسخ نمیدهد، بخش گمشده معمولاً مسیر است نه نشانی.
فهرستهای استثنا و اولویت محیط
دروازه VPN، رجیستریهای داخلی و پسوندهای DNS خصوصی را به فهرست استثنا اضافه کنید. اگر کلاینت پیش از وجود تونل بخواهد از راه پراکسی به دروازه VPN برسد، اتصال طوری شکست میخورد که شبیه قطع پراکسی است. آن استثنا را با تونل خاموش آزمایش کنید.
متغیرهای محیطی و فایلها میتوانند ناسازگار باشند. خروجی پیکربندی خود ابزار را اجرا کنید نه پوسته را و مقدارها را مقایسه کنید. متغیر تکراری با حروف کوچک، مقدار کهنه در پوسته والد یا فایل پروژه میتوانند بر تنظیمی که تازه تغییر دادید چیره شوند.
در CI پراکسی را به عنوان متغیر محرمانه بدهید و نصب یک بسته را در همان image آزمایش کنید. 407 درون کانتینر اغلب یعنی متغیر همانجا نیست، در حالی که پوسته میزبان آن را دارد.
برای هر ابزار میزبان و درگاه پراکسی، پسوندهای استثنا و فایل یا متغیری که آنها را میدهد یادداشت کنید. وقتی یک کلاینت 407 برمیگرداند و دیگری کار میکند، این یادداشت مقایسه چهار پیکربندی مختلف را به یک بررسی کوتاه تبدیل میکند.