nesting-proxy
v0.3.0
Published
Worker-first IP diversity route pool with local SOCKS5 crawling
Maintainers
Readme
nesting-proxy
English | 中文
Worker-first IP diversity route pool。通过本机 SOCKS5 爬源、可选 SNI 中继和 CF Worker,将请求路由到不同 CF 机房,获取互不重叠的出口 IP 池。零依赖,Node.js 18+。
直连 -> Colo A -> IP 池 A
经 SOCKS5 代理 -> Colo B -> IP 池 B
经 SNI 中继 -> Colo C -> IP 池 C安装
npm install nesting-proxy使用
import { createPool } from 'nesting-proxy';
const pool = await createPool({
worker: 'https://your-worker.workers.dev',
token: process.env.PROXY_TOKEN,
sni: ['203.0.113.10'],
crawl: true,
prefilter: 'cloudflare-trace',
perColo: 3,
reputationFile: './proxy-reputation.json',
requireProxyRoutes: true,
});
const res = await pool.fetch('https://api.example.com/data');
console.log(res.status, res.body, res.route, res.worker, res.colo);
pool.destroy();API
createPool(opts)— 一行创建路线池(SNI / 代理爬取 / 自动刷新)pool.fetch(url, opts?)— 代理请求,自动轮询 + 重试;opts.route可锁定路线pool.status()— 路线状态概览crawlProxies(opts)— 本机抓取并验证 SOCKS5 代理parseProxy(url)— 解析代理 URL,返回协议、host、端口和/16网段scoreProxyCandidate(meta, opts?)— 按端口、网段、来源数和历史信誉给代理候选打分createProxyReputationStore(opts?)— 创建内存信誉库,可选filePath持久化validateCloudflareTrace(proxy, opts?)— 通过代理请求 Cloudflare trace,返回 colodeployCfWorkers(config)— 通过 API 部署 Worker
子路径导入:nesting-proxy/auth、nesting-proxy/validation、nesting-proxy/deploy、nesting-proxy/worker
createPool 选项
代理路线默认先做 Cloudflare trace 预筛,再检查 Worker /health,避免无效代理消耗 Worker 请求。刷新默认间隔为 15 分钟,刷新失败或新代理全部不健康时会保留旧的健康代理路线。
常用选项:
worker— 单 Worker URL,保持最简单用法workers— 多 Worker 配置,支持string[]或{ name?, url, weight? }[];不要和worker同时传refreshInterval— 代理刷新间隔,默认15 * 60 * 1000,传0禁用自动刷新perColo— 每个 CF colo 保留的健康代理路线数,默认3,传0禁用 colo 限额candidateLimit— 进入 Worker 健康检查的候选代理上限,默认Math.max(maxProxyRoutes * 10, 300)reputationFile— 可选 JSON 文件,用于持久化代理成功/失败信誉reputationStore— 自定义信誉库,适合应用自行管理存储preferredPatterns— 自定义优选规则;默认优先:4145、156.244:20002、192.111/192.252、68.71/142.54等稳定池特征direct— 默认false;设为true时为每个 Worker 创建 direct routeproxyWorkerMode— 默认'assign',代理路线按 Worker 轮询/权重分配;'cross-product'才生成workers x proxiessniWorkerMode— 默认'cross-product'workerStrategy— route 生成阶段的 Worker 分配策略,支持'round-robin'和'weighted'crawlWorkerStrategy—crawlViaWorker时使用'primary'或'round-robin'抓源
多 Worker 示例:
const pool = await createPool({
workers: [
{ name: 'jp', url: 'https://jp.example.workers.dev', weight: 2 },
{ name: 'us', url: 'https://us.example.workers.dev' },
],
direct: true,
sni: ['203.0.113.10', '203.0.113.11'],
crawl: true,
proxyWorkerMode: 'assign',
sniWorkerMode: 'cross-product',
crawlViaWorker: true,
crawlWorkerStrategy: 'round-robin',
});pool.status().routes[] 会包含 worker、workerUrl、workerHost、type。pool.fetch() 返回值会包含 route、worker、workerUrl。
License
MIT
