proxy-chain pode executar unha instancia Server por cada porto de escoita. Capture a política dese listener no seu callback de autenticación:

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()));

A aplicación fornece os valores das contas e as URL upstream mediante a súa configuración habitual. Cada callback conserva a súa propia regra, polo que aceptar a conta no porto 8001 non acepta esa conta no porto 8002.

requestAuthentication true devolve un desafío de proxy Basic. Cando se require autenticación, upstreamProxyUrl ignórase para esa solicitude. Unha conta entrante correcta e a conta upstream son identidades distintas.

Use unha URL admitida para cada upstream, incluíndo unhas credenciais codificadas correctamente cando sexa necesario. Para un upstream HTTP público sen autenticación, escolla un candidato da lista de proxies HTTP e constrúa a súa URL sen credenciais. Un upstream omitido selecciona o reenvío directo en lugar doutro proxy automático.

O exemplo liga loopback para clientes locais. Ligazón a interface prevista de forma deliberada cando outra máquina deba conectarse, coa política de acceso correspondente.

Manteña os servidores activos para a carga dos seus clientes. O seu propietario debería pechar cada servidor mediante o seu método de peche admitido ao apagarse; o exemplo non define o ciclo de vida completo desa aplicación.

Artigos relacionados