proxy-chain: adskilte konti og upstreams for hver listener
Opret proxy-chain Server-instanser med listener-specifikke Basic-konti og upstream-ruter via prepareRequestFunction.
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.