proxy-chain pot executar una instància Server per cada port d'escolta. Captureu la política d'aquell listener a la seva funció de retorn d'autenticació:

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'aplicació proporciona els valors dels comptes i les URL upstream mitjançant la seva configuració habitual. Cada funció de retorn conserva la seva pròpia regla, de manera que acceptar el compte al port 8001 no accepta aquest compte al port 8002.

requestAuthentication true retorna un repte de proxy Basic. Quan cal autenticació, upstreamProxyUrl s'ignora per a aquesta sol·licitud. Un compte d'entrada correcte i el compte upstream són identitats diferents.

Utilitzeu una URL admesa per a cada upstream, incloent-hi credencials correctament codificades quan calgui. Per a un upstream HTTP públic sense autenticació, trieu un candidat de la llista de proxys HTTP i construïu-ne la URL sense credencials. Un upstream omès selecciona el reenviament directe en lloc d'un altre proxy automàtic.

L'exemple enllaça loopback per als clients locals. Enllaçeu la interfície prevista de manera deliberada quan una altra màquina s'hi hagi de connectar, amb la política d'accés corresponent.

Manteniu els servidors actius per a la càrrega dels seus clients. El seu propietari hauria de tancar cada servidor amb el seu mètode de tancament admès en aturar-se; l'exemple no defineix el cicle de vida complet d'aquesta aplicació.

Articles relacionats