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

แอปพลิเคชันจัดหาค่าบัญชีและ URL ของ upstream ผ่านการกำหนดค่าตามปกติ แต่ละ callback เก็บกฎของตัวเอง ดังนั้นการยอมรับบัญชีบนพอร์ต 8001 จึงไม่ยอมรับบัญชีนั้นบนพอร์ต 8002

requestAuthentication true จะคืนคำท้าทาย proxy แบบ Basic เมื่อจำเป็นต้องยืนยันตัวตน upstreamProxyUrl จะถูกละเว้นสำหรับคำขอนั้น บัญชีขาเข้าที่สำเร็จและบัญชี upstream เป็นตัวตนที่แยกจากกัน

ใช้ URL ที่รองรับสำหรับแต่ละ upstream รวมถึงข้อมูลรับรองที่เข้ารหัสอย่างถูกต้องเมื่อจำเป็น สำหรับ upstream HTTP สาธารณะที่ไม่มีการยืนยันตัวตน ให้เลือกผู้สมัครจากรายการพร็อกซี HTTP และสร้าง URL โดยไม่มีข้อมูลรับรอง upstream ที่ละเว้นจะเลือกการส่งต่อโดยตรงแทนพร็อกซีอัตโนมัติอื่น

ตัวอย่างผูก loopback สำหรับไคลเอนต์ภายในเครื่อง จงผูกอินเทอร์เฟซที่ตั้งใจไว้อย่างจงใจเมื่อเครื่องอื่นต้องเชื่อมต่อ พร้อมนโยบายการเข้าถึงที่สอดคล้องกัน

รักษาเซิร์ฟเวอร์ให้ทำงานอยู่สำหรับภาระงานของไคลเอนต์ เจ้าของควรปิดแต่ละเซิร์ฟเวอร์ผ่านวิธีปิดที่รองรับเมื่อปิดระบบ ตัวอย่างไม่ได้กำหนดวงจรชีวิตทั้งหมดของแอปพลิเคชันนั้น

บทความที่เกี่ยวข้อง