proxy-chain: osobne konta i upstreamy dla każdego listenera
Twórz instancje Server proxy-chain z kontami Basic i trasami upstream właściwymi dla listenera przez prepareRequestFunction.
proxy-chain może uruchamiać jedną instancję Server na każdy port nasłuchujący. Zapisz politykę tego listenera w jego funkcji zwrotnej uwierzytelniania:
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()));
Aplikacja dostarcza wartości kont i adresy URL upstreamów przez swoją zwykłą konfigurację. Każda funkcja zwrotna zachowuje własną regułę, więc zaakceptowanie konta na porcie 8001 nie akceptuje tego konta na porcie 8002.
requestAuthentication true zwraca wyzwanie proxy Basic. Gdy wymagane jest uwierzytelnianie, upstreamProxyUrl jest ignorowany dla tego żądania. Skuteczne konto przychodzące i konto upstream to odrębne tożsamości.
Używaj obsługiwanego URL dla każdego upstreamu, w tym prawidłowo zakodowanych danych logowania, gdy jest to wymagane. Dla publicznego upstreamu HTTP bez uwierzytelniania wybierz kandydata z listy proxy HTTP i zbuduj jego URL bez danych logowania. Pominięty upstream wybiera przekazywanie bezpośrednie zamiast innego automatycznego proxy.
Przykład wiąże loopback dla klientów lokalnych. Świadomie powiąż zamierzony interfejs, gdy musi połączyć się inna maszyna, z odpowiednią polityką dostępu.
Utrzymuj serwery przy życiu dla obciążenia ich klientów. Ich właściciel powinien zamknąć każdy serwer obsługiwaną metodą zamknięcia przy wyłączaniu; przykład nie definiuje pełnego cyklu życia tej aplikacji.