# socket-http-proxy **Repository Path**: hefeilei/socket-http-proxy ## Basic Information - **Project Name**: socket-http-proxy - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-29 - **Last Updated**: 2026-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # proxy-pool 免费公共代理池 → 本机 **SOCKS5 + HTTP** 入口,可部署到服务器供其他机器共享使用。 socks5h://proxyuser:FHRt4MGBqyacOAG59Q3Z@139.180.208.211:1080 > **实用逐步部署(含命令):** 见 [docs/部署手册.md](部署手册.md) > 默认 **每 15 分钟** 定时抓取并验活免费代理(`REFRESH_MINS`),启动时立即刷一轮,验证中增量入池。 > 文件日志默认写到部署目录 **`.logs/proxy-pool-YYYY-MM-DD.log`**(`LOG_DIR`,与控制台/journald 双写)。 - 多源抓取免费 HTTP / SOCKS5 代理并验活(过滤延迟超过阈值 `MAX_LATENCY` 的代理,默认 5s) - 定时刷新 + 失败重试 + 磁盘缓存(启动即可服务);刷新结果与旧池合并去重,旧代理超时淘汰 - 上游失败自动冷却(短时间内不再选中,避免死代理被反复重试) - 验证采用多测试目标兜底(单一测试站故障不会把全池误判为死) - 用户名密码鉴权;管理 API Token - 默认监听 `0.0.0.0`,适合多机访问 - 上游失败默认**不直连**(避免暴露服务器真实出口 IP) ## 快速开始(本地开发) ```bash # 1. 配置环境变量(推荐) cp .env.example .env # 编辑 .env 中的 PROXY_USER / PROXY_PASS / API_TOKEN # 2. 启动(自动加载根目录 .env) go run . # 也可用 flag 覆盖,本机回环示例: go run . -listen 127.0.0.1:1080 -http-proxy 127.0.0.1:1082 -api 127.0.0.1:1081 -direct ``` 客户端: ```bash curl -x socks5h://proxyuser:secret@127.0.0.1:1080 https://httpbin.org/ip curl -x http://proxyuser:secret@127.0.0.1:1082 https://httpbin.org/ip curl -H "X-API-Token: mytoken" http://127.0.0.1:1081/status ``` ## 配置 优先级:**命令行 flag > 已有环境变量 > `.env` 文件 > 内置默认值**。 根目录提供 `.env` / `.env.example`;`go run .` 与 Docker Compose 均会读取 `.env`(`.env` 已加入 `.gitignore`)。 | 配置 | Flag | 环境变量 | 默认 | |------|------|----------|------| | SOCKS5 | `-listen` | `LISTEN` | `0.0.0.0:1080` | | HTTP 代理 | `-http-proxy` | `HTTP_PROXY_LISTEN` | `0.0.0.0:1082` | | 管理 API | `-api` | `API_LISTEN` | `0.0.0.0:1081` | | 用户名 | `-user` | `PROXY_USER` | 空 | | 密码 | `-pass` | `PROXY_PASS` | 空 | | API Token | `-token` | `API_TOKEN` | 空 | | 刷新间隔(分) | `-r` | `REFRESH_MINS` | `15` | | 失败重试(秒) | `-retry` | `REFRESH_RETRY_SECS` | `60` | | 缓存文件 | `-cache` | `CACHE_FILE` | `data/proxies.json` | | 直连回退 | `-direct` | `ALLOW_DIRECT` | `false` | | 策略 | `-s` | `STRATEGY` | `round-robin` | | 验证并发 | `-c` | `CONCURRENCY` | `100` | | 验证超时 | `-t` | `TIMEOUT` | `6s` | | 延迟阈值 | `-max-latency` | `MAX_LATENCY` | `5000ms` | | 出站拨号超时 | `-dial-timeout` | `DIAL_TIMEOUT` | `8s` | | 最大并发连接 | `-max-conns` | `MAX_CONNS` | `1024` | **规则**:监听地址非 loopback 时,必须配置代理账号;若开启管理 API,还必须配置 Token。 ## 管理界面 / API 浏览器打开:**http://服务器:1081/** 页面填写 API Token 后可查看: - 当前可用免费代理数量(大字) - 调度状态 / 上次刷新 / 错误 - 代理列表(地址、协议、来源、延迟) - 一键触发刷新;每 5 秒自动更新 JSON 接口均需 `X-API-Token`(或 `Authorization: Bearer`,或 `?token=`): | 路径 | 说明 | |------|------| | `GET /` | 监控页面 | | `GET /status` | 池大小、上次刷新、错误、是否刷新中 | | `GET /proxies` | 当前可用代理列表 | | `GET /refresh` | 手动触发一轮抓取验证 | ## Docker 部署 ```bash export PROXY_USER=proxyuser export PROXY_PASS='强密码' export API_TOKEN='强Token' docker compose up -d --build docker compose logs -f ``` 其他服务器使用: ```bash curl -x socks5h://proxyuser:强密码@服务器IP:1080 https://httpbin.org/ip curl -x http://proxyuser:强密码@服务器IP:1082 https://httpbin.org/ip ``` 请在云安全组 / 防火墙仅放行可信来源 IP。 ## systemd 部署 ```bash # 编译(在有 Go 的机器上) CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o proxy-pool . sudo useradd -r -s /usr/sbin/nologin proxy-pool || true sudo mkdir -p /var/lib/proxy-pool sudo cp proxy-pool /usr/local/bin/ sudo cp deploy/proxy-pool.env.example /etc/proxy-pool.env sudo vim /etc/proxy-pool.env # 修改账号密码 sudo cp deploy/proxy-pool.service /etc/systemd/system/ sudo chown -R proxy-pool:proxy-pool /var/lib/proxy-pool sudo systemctl daemon-reload sudo systemctl enable --now proxy-pool sudo systemctl status proxy-pool ``` ## 压测 ```bash go run ./cmd/stress -proxy 'socks5://proxyuser:secret@127.0.0.1:1080' -c 10 -n 20 ``` ## 架构简述 ``` 客户端 → SOCKS5:1080 / HTTP:8080(账号鉴权) → 本地代理池选上游 → 免费 HTTP/SOCKS5 链式转发 → 目标 调度器定时:多源抓取 → 并发验活 → 更新池 → 写 data/proxies.json ``` 免费代理存活率波动大,本服务尽量保持“有池可用”,不保证单条质量与匿名性。生产请配合 IP 白名单与强密码。