proxy-chain: окремі облікові записи та upstream для кожного listener
Створюйте екземпляри Server proxy-chain з обліковими записами Basic і маршрутами upstream для кожного listener через prepareRequestFunction.
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 для локальних клієнтів. Прив'язуйте потрібний інтерфейс свідомо, коли має підключатися інша машина, з відповідною політикою доступу.
Підтримуйте сервери живими для навантаження їхніх клієнтів. Власник має закривати кожен сервер підтримуваним методом закриття під час вимкнення; приклад не визначає повний життєвий цикл цього застосунку.