proxy-chain: contas e upstreams separados para cada listener
Crie instâncias Server do proxy-chain com contas Basic e rotas upstream específicas de cada listener via prepareRequestFunction.
o proxy-chain pode executar uma instância Server por porta de escuta. Registre a política desse listener no seu callback de autenticação:
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 aplicação fornece os valores das contas e os URL de upstream pela sua configuração habitual. Cada callback mantém a sua própria regra, portanto aceitar a conta na porta 8001 não aceita essa conta na porta 8002.
requestAuthentication true devolve um desafio de proxy Basic. Quando a autenticação é exigida, o upstreamProxyUrl é ignorado para esse pedido. Uma conta de entrada bem-sucedida e a conta de upstream são identidades distintas.
Use um URL suportado para cada upstream, incluindo credenciais codificadas corretamente quando necessário. Para um upstream HTTP público sem autenticação, escolha um candidato da lista de proxies HTTP e construa o seu URL sem credenciais. Um upstream omitido seleciona o encaminhamento direto em vez de outro proxy automático.
O exemplo liga o loopback para clientes locais. Ligue deliberadamente a interface pretendida quando outra máquina tiver de se ligar, com a política de acesso correspondente.
Mantenha os servidores vivos para a carga de trabalho dos seus clientes. O proprietário deve fechar cada servidor através do seu método de fecho suportado ao encerrar; o exemplo não define o ciclo de vida completo dessa aplicação.