proxy-chain: account e upstream separati per ogni listener
Create istanze Server di proxy-chain con account Basic e rotte upstream specifiche per listener tramite prepareRequestFunction.
proxy-chain può eseguire un'istanza Server per ogni porta in ascolto. Registrate la politica di quel listener nel suo callback di autenticazione:
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()));
L'applicazione fornisce i valori degli account e gli URL upstream tramite la sua configurazione abituale. Ogni callback conserva la propria regola, quindi accettare l'account sulla porta 8001 non accetta quell'account sulla porta 8002.
requestAuthentication true restituisce una richiesta di autenticazione proxy Basic. Quando l'autenticazione è richiesta, upstreamProxyUrl viene ignorato per quella richiesta. Un account in ingresso valido e l'account upstream sono identità distinte.
Usate un URL supportato per ogni upstream, incluse credenziali codificate correttamente quando necessario. Per un upstream HTTP pubblico non autenticato, scegliete un candidato dall'elenco di proxy HTTP e costruite il suo URL senza credenziali. Un upstream omesso seleziona l'inoltro diretto anziché un altro proxy automatico.
L'esempio associa loopback per i client locali. Associate deliberatamente l'interfaccia prevista quando un'altra macchina deve connettersi, con la politica di accesso corrispondente.
Mantenete i server attivi per il carico dei loro client. Il loro proprietario dovrebbe chiudere ogni server tramite il metodo di chiusura supportato allo spegnimento; l'esempio non definisce il ciclo di vita completo di quell'applicazione.