proxy-chain: aparte accounts en upstreams per listener
Maak proxy-chain Server-instanties met listenerspecifieke Basic-accounts en upstream-routes via prepareRequestFunction.
proxy-chain kan één Server-instantie per luisterende poort draaien. Leg het beleid van die listener vast in de bijbehorende authenticatie-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()));
De applicatie levert de accountwaarden en upstream-URL's via de normale configuratie. Elke callback behoudt zijn eigen regel, dus het accepteren van het account op poort 8001 accepteert dat account niet op poort 8002.
requestAuthentication true geeft een Basic-proxy-uitdaging terug. Wanneer authenticatie vereist is, wordt upstreamProxyUrl voor dat verzoek genegeerd. Een geslaagd inkomend account en het upstream-account zijn afzonderlijke identiteiten.
Gebruik een ondersteunde URL voor elke upstream, inclusief correct gecodeerde inloggegevens wanneer dat nodig is. Kies voor een niet-geauthenticeerde openbare HTTP-upstream een kandidaat uit de HTTP-proxylijst en bouw de URL zonder inloggegevens. Een weggelaten upstream kiest directe doorsturing in plaats van een andere automatische proxy.
Het voorbeeld bindt loopback voor lokale clients. Bind de bedoelde interface bewust wanneer een andere machine moet verbinden, met het bijbehorende toegangsbeleid.
Houd de servers in leven voor de werklast van hun clients. De eigenaar moet elke server bij het afsluiten sluiten via de ondersteunde sluitmethode; het voorbeeld definieert niet de volledige levenscyclus van die applicatie.