proxy-chain може запускати один екземпляр Server на кожен прослуховуваний порт. Зафіксуйте політику цього listener у його callback-функції автентифікації:

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

Застосунок передає значення облікових записів і URL-адреси upstream через свою звичайну конфігурацію. Кожен callback зберігає власне правило, тому прийняття облікового запису на порту 8001 не приймає цей запис на порту 8002.

requestAuthentication true повертає запит проксі-автентифікації Basic. Коли потрібна автентифікація, upstreamProxyUrl для цього запиту ігнорується. Успішний вхідний обліковий запис і обліковий запис upstream — різні суб'єкти.

Використовуйте підтримуваний URL для кожного upstream, зокрема правильно закодовані облікові дані, коли це потрібно. Для публічного HTTP-upstream без автентифікації виберіть кандидата зі списку HTTP-проксі і побудуйте його URL без облікових даних. Пропущений upstream вибирає пряме переспрямування, а не інший автоматичний проксі.

Приклад прив'язує loopback для локальних клієнтів. Прив'язуйте потрібний інтерфейс свідомо, коли має підключатися інша машина, з відповідною політикою доступу.

Підтримуйте сервери живими для навантаження їхніх клієнтів. Власник має закривати кожен сервер підтримуваним методом закриття під час вимкнення; приклад не визначає повний життєвий цикл цього застосунку.

Схожі статті