proxy-chain peut exécuter une instance Server par port d'écoute. Consignez la politique de ce listener dans son callback d'authentification :

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'application fournit les valeurs des comptes et les URL upstream via sa configuration habituelle. Chaque callback conserve sa propre règle, donc accepter le compte sur le port 8001 n'accepte pas ce compte sur le port 8002.

requestAuthentication true renvoie un défi proxy Basic. Lorsque l'authentification est requise, upstreamProxyUrl est ignoré pour cette requête. Un compte entrant valide et le compte upstream sont des identités distinctes.

Utilisez une URL prise en charge pour chaque upstream, y compris des identifiants correctement encodés si nécessaire. Pour un upstream HTTP public non authentifié, choisissez un candidat dans la liste de proxys HTTP et construisez son URL sans identifiants. Un upstream omis sélectionne un transfert direct plutôt qu'un autre proxy automatique.

L'exemple lie loopback pour les clients locaux. Liez délibérément l'interface prévue lorsqu'une autre machine doit se connecter, avec la politique d'accès correspondante.

Maintenez les serveurs en vie pour la charge de leurs clients. Leur propriétaire doit fermer chaque serveur via sa méthode de fermeture prise en charge à l'arrêt ; l'exemple ne définit pas le cycle de vie complet de cette application.

Articles similaires