proxy-chain: samostatné účty a upstreamy pro každý listener
Vytvářejte instance Server z proxy-chain s účty Basic a upstream trasami specifickými pro listener pomocí prepareRequestFunction.
proxy-chain může spouštět jednu instanci Server na každý naslouchající port. Zachyťte zásadu tohoto listeneru v jeho zpětném volání pro ověření:
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()));
Aplikace dodává hodnoty účtů a adresy URL upstreamů prostřednictvím své běžné konfigurace. Každé zpětné volání si zachovává vlastní pravidlo, takže přijetí účtu na portu 8001 nepřijímá tento účet na portu 8002.
requestAuthentication true vrací výzvu proxy Basic. Když je vyžadováno ověření, upstreamProxyUrl se pro tento požadavek ignoruje. Úspěšný příchozí účet a účet upstreamu jsou odlišné identity.
Pro každý upstream použijte podporovanou URL, včetně správně zakódovaných přihlašovacích údajů, když je to nutné. Pro veřejný HTTP upstream bez ověřování vyberte kandidáta ze seznamu HTTP proxy a sestavte jeho URL bez přihlašovacích údajů. Vynechaný upstream volí přímé předávání místo jiné automatické proxy.
Příklad svazuje loopback pro místní klienty. Svazujte zamýšlené rozhraní záměrně, když se musí připojit jiný stroj, s odpovídající zásadou přístupu.
Udržujte servery živé pro zátěž jejich klientů. Jejich vlastník by měl každý server zavřít podporovanou metodou zavření při vypnutí; příklad nedefinuje úplný životní cyklus této aplikace.