proxy-chain kan kjøre én Server-instans per lyttende port. Fest den listenerens policy i autentiserings-callbacken:

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

Applikasjonen leverer kontoverdiene og upstream-URL-ene via sin vanlige konfigurasjon. Hver callback beholder sin egen regel, så å godta kontoen på port 8001 godtar ikke den kontoen på port 8002.

requestAuthentication true returnerer en Basic-proxy-utfordring. Når autentisering kreves, ignoreres upstreamProxyUrl for den forespørselen. En vellykket innkommende konto og upstream-kontoen er forskjellige identiteter.

Bruk en støttet URL for hver upstream, inkludert korrekt kodede legitimasjoner når det kreves. For en offentlig HTTP-upstream uten autentisering, velg en kandidat fra HTTP-proxylisten og bygg URL-en uten legitimasjoner. En utelatt upstream velger direkte videresending i stedet for en annen automatisk proxy.

Eksemplet binder loopback for lokale klienter. Bind grensesnittet som er ment bevisst når en annen maskin må koble til, med den tilsvarende tilgangspolicyen.

Hold serverne i live for klientenes arbeidsbelastning. Eieren deres bør lukke hver server via sin støttede lukkemetode ved avslutning; eksemplet definerer ikke den applikasjonens fulle livssyklus.

Relaterte artikler