proxy-chain:为每个 listener 使用独立的账户与上游
通过 prepareRequestFunction 创建带 listener 专属 Basic 账户和上游路由的 proxy-chain Server 实例。
proxy-chain 可以为每个监听端口运行一个 Server 实例。在认证回调中固定该 listener 的策略:
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。当其他机器必须连接时,请有意识地绑定预期接口,并采用相应的访问策略。
让服务器为其客户端的工作负载持续运行。所有者应在关闭时通过受支持的关闭方法关闭每个服务器;示例并未定义该应用的完整生命周期。