proxy-chain: حسابات ومسارات عليا منفصلة لكل مستمع
أنشئ نسخ Server من proxy-chain بحسابات Basic خاصة بكل مستمع ومسارات عليا عبر prepareRequestFunction.
يستطيع proxy-chain تشغيل نسخة Server واحدة لكل منفذ استماع. احتجز سياسة ذلك المستمع في دالة رد نداء المصادقة:
import { Server } from 'proxy-chain';
const listeners = [
{ port: 8001, user: userA, password: passwordA, upstream: upstreamA },
{ port: 8002, user: userB, password: passwordB, upstream: upstreamB },
];
const servers = listeners.map(rule => new Server({
host: '127.0.0.1',
port: rule.port,
prepareRequestFunction: ({ username, password }) => ({
requestAuthentication:
username !== rule.user || password !== rule.password,
upstreamProxyUrl: rule.upstream,
}),
}));
await Promise.all(servers.map(server => server.listen()));
يوفّر التطبيق قيم الحسابات وعناوين URL العليا عبر إعداداته المعتادة. يحتفظ كل رد نداء بقاعدته، لذا فإن قبول الحساب على المنفذ 8001 لا يعني قبوله على المنفذ 8002.
يعيد requestAuthentication true تحدّي وكيل Basic. عند اشتراط المصادقة يُتجاهل upstreamProxyUrl لذلك الطلب. الحساب الوارد الناجح وحساب المسار الأعلى هويتان منفصلتان.
استخدم عنوان URL مدعومًا لكل مسار أعلى، بما في ذلك بيانات اعتماد مُرمَّزة بشكل صحيح عند الحاجة. بالنسبة لمسار HTTP عام غير مُصادَق، اختر مرشحًا من قائمة وكلاء HTTP وابنِ عنوانه بدون بيانات اعتماد. المسار الأعلى المحذوف يختار التمرير المباشر بدلًا من وكيل تلقائي آخر.
يربط المثال واجهة loopback للعملاء المحليين. اربط الواجهة المقصودة عن قصد عندما يجب أن يتصل جهاز آخر، مع سياسة الوصول المقابلة.
أبقِ الخوادم حيّة لعبء عمل عملائها. على مالكها إغلاق كل خادم عبر طريقة الإغلاق المدعومة عند الإيقاف؛ لا يحدد المثال دورة الحياة الكاملة لذلك التطبيق.