proxy-chain: 리스너마다 별도의 계정과 업스트림 사용
prepareRequestFunction을 통해 리스너별 Basic 계정과 업스트림 경로를 갖는 proxy-chain Server 인스턴스를 만듭니다.
proxy-chain은 수신 포트마다 하나의 Server 인스턴스를 실행할 수 있습니다. 해당 리스너의 정책을 인증 콜백에 담으십시오:
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을 제공합니다. 각 콜백은 자체 규칙을 유지하므로, 포트 8001에서 계정을 허용해도 포트 8002에서 그 계정이 허용되지는 않습니다.
requestAuthentication true는 Basic 프록시 인증 요구를 반환합니다. 인증이 필요하면 해당 요청에서는 upstreamProxyUrl이 무시됩니다. 인바운드 계정 인증 성공과 업스트림 계정은 서로 다른 신원입니다.
각 업스트림에는 지원되는 URL을 사용하고, 필요하면 올바르게 인코딩된 자격 증명을 포함하십시오. 인증이 없는 공용 HTTP 업스트림의 경우 HTTP 프록시 목록에서 후보를 골라 자격 증명 없이 URL을 만드십시오. 업스트림을 생략하면 다른 자동 프록시가 아니라 직접 전달이 선택됩니다.
예제는 로컬 클라이언트를 위해 loopback에 바인딩합니다. 다른 머신이 연결해야 한다면 해당 액세스 정책과 함께 의도한 인터페이스에 의도적으로 바인딩하십시오.
서버는 클라이언트의 작업 부하를 위해 계속 살려 두십시오. 소유자는 종료 시 지원되는 종료 메서드로 각 서버를 닫아야 합니다. 예제는 해당 애플리케이션의 전체 수명 주기를 정의하지 않습니다.