proxy-chain kan köra en Server-instans per lyssnande port. Fånga den lyssnarens policy i dess autentiserings-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 tillhandahåller kontovärdena och upstream-URL:erna via sin vanliga konfiguration. Varje callback behåller sin egen regel, så att acceptera kontot på port 8001 accepterar inte det kontot på port 8002.

requestAuthentication true returnerar en Basic-proxy-utmaning. När autentisering krävs ignoreras upstreamProxyUrl för den begäran. Ett lyckat inkommande konto och upstream-kontot är separata identiteter.

Använd en URL som stöds för varje upstream, inklusive korrekt kodade autentiseringsuppgifter när det krävs. För en oautentiserad offentlig HTTP-upstream väljer du en kandidat från HTTP-proxylistan och bygger dess URL utan autentiseringsuppgifter. En utelämnad upstream väljer direkt vidarebefordran i stället för en annan automatisk proxy.

Exemplet binder loopback för lokala klienter. Bind det avsedda gränssnittet medvetet när en annan maskin måste ansluta, med motsvarande åtkomstpolicy.

Håll servrarna vid liv för deras klienters arbetsbelastning. Deras ägare bör stänga varje server via dess stödda stängningsmetod vid avstängning; exemplet definierar inte den applikationens fullständiga livscykel.

Relaterade artiklar