proxy-chain: getrennte Konten und Upstreams pro Listener
Erstellen Sie proxy-chain Server-Instanzen mit listenerspezifischen Basic-Konten und Upstream-Routen über prepareRequestFunction.
proxy-chain kann eine Server-Instanz pro lauschendem Port betreiben. Fassen Sie die Richtlinie dieses Listeners in seinem Authentifizierungs-Callback zusammen:
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()));
Die Anwendung liefert die Kontowerte und Upstream-URLs über ihre normale Konfiguration. Jeder Callback behält seine eigene Regel, daher akzeptiert das Akzeptieren des Kontos auf Port 8001 dieses Konto nicht auf Port 8002.
requestAuthentication true gibt eine Basic-Proxy-Aufforderung zurück. Wenn eine Authentifizierung erforderlich ist, wird upstreamProxyUrl für diese Anfrage ignoriert. Ein erfolgreiches eingehendes Konto und das Upstream-Konto sind getrennte Identitäten.
Verwenden Sie eine unterstützte URL für jeden Upstream, einschließlich korrekt kodierter Anmeldedaten, wenn erforderlich. Wählen Sie für einen nicht authentifizierten öffentlichen HTTP-Upstream einen Kandidaten aus der HTTP-Proxy-Liste und bilden Sie seine URL ohne Anmeldedaten. Ein ausgelassener Upstream wählt die direkte Weiterleitung statt eines anderen automatischen Proxys.
Das Beispiel bindet Loopback für lokale Clients. Binden Sie die vorgesehene Schnittstelle bewusst, wenn sich eine andere Maschine verbinden muss, mit der entsprechenden Zugriffsrichtlinie.
Halten Sie die Server für die Arbeitslast ihrer Clients am Leben. Ihr Eigentümer sollte jeden Server beim Herunterfahren über seine unterstützte Schließmethode schließen; das Beispiel definiert nicht den vollständigen Lebenszyklus dieser Anwendung.