proxy-chain: samostatné účty a upstreamy pre každý listener
Vytvárajte inštancie Server z proxy-chain s účtami Basic a upstream trasami špecifickými pre listener pomocou prepareRequestFunction.
proxy-chain môže spúšťať jednu inštanciu Server na každý počúvajúci port. Zachyťte zásadu tohto listeneru v jeho spätnom volaní na overenie:
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()));
Aplikácia dodáva hodnoty účtov a adresy URL upstreamov prostredníctvom svojej bežnej konfigurácie. Každé spätné volanie si zachováva vlastné pravidlo, takže prijatie účtu na porte 8001 neprijíma tento účet na porte 8002.
requestAuthentication true vracia výzvu proxy Basic. Keď sa vyžaduje overenie, upstreamProxyUrl sa pre túto požiadavku ignoruje. Úspešný prichádzajúci účet a účet upstreamu sú odlišné identity.
Pre každý upstream použite podporovanú URL vrátane správne zakódovaných prihlasovacích údajov, keď je to potrebné. Pre verejný HTTP upstream bez overovania vyberte kandidáta zo zoznamu HTTP proxy a zostavte jeho URL bez prihlasovacích údajov. Vynechaný upstream volí priame preposielanie namiesto inej automatickej proxy.
Príklad zväzuje loopback pre miestnych klientov. Zámerme zviažte zamýšľané rozhranie, keď sa musí pripojiť iný stroj, s príslušnou zásadou prístupu.
Udržujte servery živé pre záťaž ich klientov. Ich vlastník by mal každý server zavrieť podporovanou metódou zatvorenia pri vypnutí; príklad nedefinuje úplný životný cyklus tejto aplikácie.