proxy-chain می‌تواند برای هر پورت شنود یک نمونه Server اجرا کند. خط‌مشی آن listener را در callback احراز هویت آن نگه دارید:

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()));

برنامه مقادیر حساب‌ها و نشانی‌های upstream را از طریق پیکربندی معمول خود تأمین می‌کند. هر callback قاعده خود را حفظ می‌کند، بنابراین پذیرش حساب در پورت 8001 به معنای پذیرش آن حساب در پورت 8002 نیست.

requestAuthentication true یک چالش پروکسی Basic برمی‌گرداند. وقتی احراز هویت لازم است، upstreamProxyUrl برای آن درخواست نادیده گرفته می‌شود. حساب ورودی موفق و حساب upstream هویت‌های متمایزی هستند.

برای هر upstream از یک URL پشتیبانی‌شده استفاده کنید، از جمله اعتبارنامه‌های به‌درستی کدگذاری‌شده در صورت نیاز. برای یک upstream عمومی HTTP بدون احراز هویت، نامزدی از فهرست پروکسی HTTP انتخاب کنید و URL آن را بدون اعتبارنامه بسازید. upstream حذف‌شده ارسال مستقیم را به‌جای پروکسی خودکار دیگر انتخاب می‌کند.

مثال loopback را برای کلاینت‌های محلی متصل می‌کند. وقتی ماشین دیگری باید متصل شود، رابط موردنظر را آگاهانه با خط‌مشی دسترسی متناظر متصل کنید.

سرورها را برای بار کاری کلاینت‌هایشان زنده نگه دارید. مالک آن‌ها باید هنگام خاموشی هر سرور را با روش بستن پشتیبانی‌شده‌اش ببندد؛ مثال چرخه عمر کامل آن برنامه را تعریف نمی‌کند.

مقالات مرتبط