proxy-chain kan køre én Server-instans pr. lyttende port. Fasthold den listeners politik i dens autentificerings-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()));

Applikationen leverer kontoværdierne og upstream-URL'erne via sin normale konfiguration. Hver callback beholder sin egen regel, så accept af kontoen på port 8001 accepterer ikke den konto på port 8002.

requestAuthentication true returnerer en Basic-proxy-udfordring. Når autentificering kræves, ignoreres upstreamProxyUrl for den anmodning. En vellykket indgående konto og upstream-kontoen er forskellige identiteter.

Brug en understøttet URL til hver upstream, inklusive korrekt kodede legitimationsoplysninger, når det kræves. Til en offentlig HTTP-upstream uden autentificering vælges en kandidat fra HTTP-proxylisten, og dens URL bygges uden legitimationsoplysninger. En udeladt upstream vælger direkte videresendelse i stedet for en anden automatisk proxy.

Eksemplet binder loopback for lokale klienter. Bind det tilsigtede interface bevidst, når en anden maskine skal forbinde, med den tilsvarende adgangspolitik.

Hold serverne i live til deres klienters arbejdsbyrde. Deres ejer bør lukke hver server via dens understøttede lukkemetode ved nedlukning; eksemplet definerer ikke den applikations fulde livscyklus.

Relaterede artikler