feat: add environment variable support for proxy authentication and geo-blocking

- Introduced `.env.example` for environment variable configuration.
- Updated `docker-compose.yml` to utilize environment variables for proxy settings.
- Implemented proxy authentication with Basic Auth and geo-blocking based on country codes.
- Added `GEO_FILTER.md` for documentation on geo-filtering configuration.
- Enhanced logging to indicate authentication status and blocked countries during proxy server startup.
This commit is contained in:
isboyjc
2026-03-29 04:11:38 +08:00
parent 7a5061b101
commit a70df0d505
14 changed files with 1088 additions and 120 deletions

385
README.md
View File

@@ -2,10 +2,39 @@
> **智能代理池系统** — 基于 Go 的轻量级、低资源消耗、自适应的代理池服务
[![Docker Hub](https://img.shields.io/docker/v/isboyjc/goproxy?label=Docker%20Hub&logo=docker)](https://hub.docker.com/r/isboyjc/goproxy)
[![GitHub Container Registry](https://img.shields.io/badge/GHCR-latest-blue?logo=github)](https://github.com/isboyjc/GoProxy/pkgs/container/goproxy)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Go Version](https://img.shields.io/badge/Go-1.25-00ADD8?logo=go)](https://go.dev/)
GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格验证(出口 IP + 位置 + 延迟)后加入智能代理池,对外提供统一的 HTTP 代理服务。系统采用质量分级、智能补充、自动优化等机制,确保代理池始终保持高质量和稳定性。
**GitHub**[github.com/isboyjc/GoProxy](https://github.com/isboyjc/GoProxy)
![](https://cdn.isboyjc.com/img/Xnip2026-03-29_03-35-06.png)
## 📑 目录
- [核心特性](#-核心特性)
- [项目结构](#-项目结构)
- [快速开始](#-快速开始)
- [Docker 部署](#-docker-部署) - 推荐使用 docker-compose
- [配置说明](#-配置说明) - 环境变量、池子参数、认证、地理过滤
- [WebUI 使用指南](#-webui-使用指南) - 双角色权限、操作功能
- [核心架构](#-核心架构) - 智能池子、状态转换、质量分级
- [数据库 Schema](#-数据库-schema)
- [代理源](#-代理源)
- [测试代理服务](#-测试代理服务)
- [常见问题](#-常见问题)
- [致谢与声明](#-致谢与声明)
**扩展文档**
- [Docker 镜像发布配置](.github/DOCKER_SETUP.md) - GitHub Actions CI/CD 设置
- [地理过滤配置指南](GEO_FILTER.md) - 国家代码、使用场景、测试方法
- [认证功能测试](test/AUTH_TEST.md) - 代理认证测试和多语言客户端示例
- [基础功能测试](test/TEST_GUIDE.md) - 测试脚本使用指南
- [架构设计文档](POOL_DESIGN.md) - 完整的系统设计和实现细节
## ✨ 核心特性
### 🎯 智能池子机制
@@ -39,6 +68,7 @@ GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格
- **7776 端口(最低延迟)**:固定使用延迟最低的代理,除非失败才切换,适合长连接和流媒体
- **自动切换**两个端口都支持失败自动重试7776 失败后切换到次优代理
- **共享池子**:两个端口使用同一个代理池,统一管理和优化
- **可选认证**:支持 Basic Auth 认证保护,对外开放时可启用
### 🎨 黑客风格 WebUI
- **Matrix 美学**:荧光绿 + 纯黑背景CRT 扫描线效果JetBrains Mono 等宽字体
@@ -58,26 +88,35 @@ GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格
```text
.
├── main.go # 程序入口,协调所有模块
├── config/ # 配置系统(池子容量、延迟标准、验证参数等)
├── pool/ # 🆕 池子管理器(入池判断、替换逻辑、状态计算)
├── fetcher/ # 🆕 智能抓取器(源分组、断路器、按需抓取)
│ ├── fetcher.go # 多模式抓取逻辑
│ ├── source_manager.go # 源状态管理和断路器
│ └── ip_query.go # IP查询限流和多源降级
├── validator/ # 代理验证(连接测试 + 出口IP检测
├── checker/ # 🆕 分批健康检查器
├── optimizer/ # 🆕 优化轮换器(定时优化池子质量)
├── storage/ # 🆕 扩展存储层(质量等级、使用统计、源状态表)
├── proxy/ # 对外 HTTP 代理服务
├── webui/ # 🆕 黑客风格 WebUI健康仪表盘、配置界面
├── logger/ # 内存日志收集
├── test/ # 🧪 测试脚本Bash/Go/Python
│ ├── test_proxy.sh # Bash 测试脚本
│ ├── test_proxy.go # Go 测试脚本
│ ├── test_proxy.py # Python 测试脚本
── TEST_GUIDE.md # 测试指南
└── POOL_DESIGN.md # 🆕 完整架构设计文档
├── main.go # 程序入口,协调所有模块
├── config/ # 配置系统(池子容量、延迟标准、验证参数等)
├── pool/ # 🆕 池子管理器(入池判断、替换逻辑、状态计算)
├── fetcher/ # 🆕 智能抓取器(源分组、断路器、按需抓取)
│ ├── fetcher.go # 多模式抓取逻辑
│ ├── source_manager.go # 源状态管理和断路器
│ └── ip_query.go # IP查询限流和多源降级
├── validator/ # 代理验证(连接测试 + 出口IP检测 + 地理过滤
├── checker/ # 🆕 分批健康检查器
├── optimizer/ # 🆕 优化轮换器(定时优化池子质量)
├── storage/ # 🆕 扩展存储层(质量等级、使用统计、源状态表)
├── proxy/ # 🆕 对外 HTTP 代理服务(双端口 + 可选认证)
├── webui/ # 🆕 黑客风格 WebUI健康仪表盘、配置界面、RBAC
├── logger/ # 内存日志收集
├── test/ # 🧪 测试脚本与文档
│ ├── test_proxy.sh # Bash 测试脚本
│ ├── test_proxy.go # Go 测试脚本
│ ├── test_proxy.py # Python 测试脚本
── TEST_GUIDE.md # 基础功能测试指南
│ └── AUTH_TEST.md # 🆕 认证功能测试指南
├── .github/ # 🆕 GitHub Actions CI/CD
│ ├── workflows/docker-image.yml # 自动构建多架构镜像
│ └── DOCKER_SETUP.md # Docker 镜像发布配置指南
├── .env.example # 🆕 环境变量配置模板
├── docker-compose.yml # 🆕 Docker Compose 配置(自动更新镜像)
├── Dockerfile # Docker 构建文件
├── GEO_FILTER.md # 🆕 地理过滤配置指南
├── POOL_DESIGN.md # 完整架构设计文档
└── README.md # 本文件
```
## 🚀 快速开始
@@ -100,15 +139,16 @@ go build -o proxygo .
```
程序启动后会:
1. 加载配置(优先 `config.json`
1. 加载配置(环境变量 + `config.json`
2. 初始化数据库和限流器
3. 启动 WebUI`:7778`
4. 立即执行智能填充(按需抓取 + 严格验证
5. 启动后台协程:
- 状态监控(每分钟)
3. 清理不符合条件的代理(屏蔽国家出口、无地理信息
4. 启动 WebUI`:7778`
5. 立即执行智能填充(按需抓取 + 严格验证)
6. 启动后台协程:
- 状态监控(每 30 秒)
- 健康检查(默认 5 分钟)
- 优化轮换(默认 30 分钟)
6. 启动两个代理服务:
7. 启动两个代理服务(支持可选认证)
- `:7776` - 最低延迟模式(稳定连接)
- `:7777` - 随机轮换模式IP 多样性)
@@ -151,6 +191,7 @@ curl -x http://127.0.0.1:7776 https://httpbin.org/ip
#### 环境变量配置
**本地使用(无认证)**
```bash
# 使用随机模式
export http_proxy=http://127.0.0.1:7777
@@ -161,6 +202,13 @@ export http_proxy=http://127.0.0.1:7776
export https_proxy=http://127.0.0.1:7776
```
**远程使用(带认证)**
```bash
# 格式http://username:password@host:port
export http_proxy=http://proxy:your_password@192.168.1.100:7777
export https_proxy=http://proxy:your_password@192.168.1.100:7777
```
#### 端口对比
| 特性 | 7777随机轮换 | 7776最低延迟 |
@@ -190,50 +238,130 @@ export https_proxy=http://127.0.0.1:7776
## 🐳 Docker 部署
### 使用 Dockerfile
> 💡 **自动构建**GitHub Actions 自动构建多架构镜像amd64/arm64支持 Docker Hub 和 GHCR 双仓库推送。
> 详细配置说明请查看 [`.github/DOCKER_SETUP.md`](.github/DOCKER_SETUP.md)
### 快速启动(推荐)
使用 docker-compose支持环境变量配置自动拉取最新镜像
```bash
docker build -t proxygo .
docker run -d \
--name proxygo \
-p 127.0.0.1:7776:7776 \
-p 127.0.0.1:7777:7777 \
-p 7778:7778 \
-e TZ=Asia/Shanghai \
-e WEBUI_PASSWORD=your_password \
-e DATA_DIR=/app/data \
-v "$(pwd)/data:/app/data" \
proxygo
# 1. 复制环境变量模板
cp .env.example .env
# 2. 根据需要编辑 .env可选默认配置即可使用
# vim .env
# 3. 启动服务(自动拉取最新镜像)
docker compose up -d
# 4. 访问 WebUI
# http://localhost:7778默认密码goproxy
```
### 使用 docker-compose
### 使用 Docker Hub 镜像
```bash
docker compose up -d --build
docker pull isboyjc/goproxy:latest
docker run -d --name proxygo \
-p 127.0.0.1:7776:7776 -p 127.0.0.1:7777:7777 -p 7778:7778 \
-e WEBUI_PASSWORD=your_password -v "$(pwd)/data:/app/data" \
isboyjc/goproxy:latest
```
### WebUI 公网访问配置
得益于**双角色权限系统**WebUI 可以安全地对外开放:
### 使用 GitHub Container Registry 镜像
```bash
docker run -d \
--name proxygo \
-p 127.0.0.1:7776:7776 \
-p 127.0.0.1:7777:7777 \
-p 0.0.0.0:7778:7778 \ # 公网访问 WebUI
-e TZ=Asia/Shanghai \
-e WEBUI_PASSWORD=strong_password \
-e DATA_DIR=/app/data \
-v "$(pwd)/data:/app/data" \
proxygo
docker pull ghcr.io/isboyjc/goproxy:latest
docker run -d --name proxygo \
-p 127.0.0.1:7776:7776 -p 127.0.0.1:7777:7777 -p 7778:7778 \
-e WEBUI_PASSWORD=your_password -v "$(pwd)/data:/app/data" \
ghcr.io/isboyjc/goproxy:latest
```
**安全说明**
- 访客(未登录)只能查看数据,无法执行任何操作
- 所有写操作(抓取、删除、配置修改)都需要管理员密码
- 建议设置强密码(通过 `WEBUI_PASSWORD` 环境变量)
- 代理服务端口7776、7777建议仅绑定内网`127.0.0.1`
### 环境变量配置
**核心配置**`.env` 文件):
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `PROXY_HOST` | `127.0.0.1` | 代理服务绑定地址(`0.0.0.0` = 对外开放) |
| `BLOCKED_COUNTRIES` | `CN` | 屏蔽的国家代码(逗号分隔,如 `CN,RU`,留空=不屏蔽) |
| `PROXY_AUTH_ENABLED` | `false` | 是否启用代理认证 |
| `PROXY_AUTH_USERNAME` | `proxy` | 代理认证用户名 |
| `PROXY_AUTH_PASSWORD` | 空 | 代理认证密码 |
| `WEBUI_PASSWORD` | `goproxy` | WebUI 登录密码 |
完整环境变量列表请查看 `.env.example` 文件。
**常用配置示例**
```bash
# 场景 1本地使用默认最安全
# 直接运行 docker compose up -d 即可
# 场景 2对外开放 + 启用认证(推荐)
cat > .env << EOF
PROXY_HOST=0.0.0.0
PROXY_AUTH_ENABLED=true
PROXY_AUTH_USERNAME=myuser
PROXY_AUTH_PASSWORD=secure_pass_123
WEBUI_PASSWORD=admin_pass_456
BLOCKED_COUNTRIES=CN
EOF
docker compose up -d
# 场景 3屏蔽多个国家
cat > .env << EOF
BLOCKED_COUNTRIES=CN,RU,KP,IR
WEBUI_PASSWORD=admin_pass
EOF
docker compose up -d
# 场景 4不屏蔽任何国家
cat > .env << EOF
BLOCKED_COUNTRIES=
WEBUI_PASSWORD=admin_pass
EOF
docker compose up -d
```
### 安全部署配置
**默认配置**:代理服务仅本地访问(`127.0.0.1`WebUI 可对外访问。
**如需对外开放代理服务**,强烈建议启用认证:
| 使用场景 | 配置建议 | 安全级别 |
|---------|---------|---------|
| **个人 VPS + 本地使用** | `PROXY_HOST=127.0.0.1`(默认) | ⭐⭐⭐⭐⭐ 最安全 |
| **团队共享 + 认证** | `PROXY_HOST=0.0.0.0` + 启用认证 | ⭐⭐⭐⭐ 安全 |
| **内网 + 防火墙** | `PROXY_HOST=0.0.0.0` + iptables 白名单 | ⭐⭐⭐ 中等 |
**启用代理认证**(编辑 `.env`
```bash
PROXY_HOST=0.0.0.0
PROXY_AUTH_ENABLED=true
PROXY_AUTH_USERNAME=myuser
PROXY_AUTH_PASSWORD=secure_pass_123
```
**客户端使用(带认证)**
```bash
# 环境变量方式
export http_proxy=http://myuser:secure_pass_123@server-ip:7777
export https_proxy=http://myuser:secure_pass_123@server-ip:7777
# curl 直接指定
curl -x http://myuser:secure_pass_123@server-ip:7777 https://httpbin.org/ip
# Python requests
proxies = {'http': 'http://myuser:secure_pass_123@server-ip:7777', 'https': '...'}
```
> 💡 **认证测试指南**:详细的认证功能测试和多语言客户端示例,请查看 [`test/AUTH_TEST.md`](test/AUTH_TEST.md)
## ⚙️ 配置说明
@@ -268,6 +396,16 @@ docker run -d \
| `stable_proxy_port` | `:7776` | 最低延迟代理端口 |
| `webui_port` | `:7778` | WebUI 端口 |
**代理认证配置**
| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| `proxy_auth_enabled` | `false` | 是否启用代理认证(对外开放时建议启用) |
| `proxy_auth_username` | `proxy` | 代理认证用户名 |
| `proxy_auth_password_hash` | 空 | 代理认证密码 SHA256 哈希(通过环境变量 `PROXY_AUTH_PASSWORD` 设置原始密码) |
> 💡 **注意**:代理认证配置通过**环境变量**设置,不在 `config.json` 中。启动时从 `PROXY_AUTH_ENABLED`、`PROXY_AUTH_USERNAME`、`PROXY_AUTH_PASSWORD` 环境变量读取。
**池子容量配置**
| 参数 | 默认值 | 说明 | 推荐范围 |
@@ -349,17 +487,28 @@ docker run -d \
### 固定配置
以下配置在代码中固定,无需调整:
以下配置在代码中固定或通过环境变量设置,无需在 `config.json`调整:
| 配置项 | 值 | 说明 |
| --- | --- | --- |
| `WebUIPort` | `:7778` | Web 管理后台端口 |
| `ProxyPort` | `:7777` | 对外统一代理端口 |
| `WebUIPort` | `:7778` | WebUI 端口 |
| `ProxyPort` | `:7777` | 随机轮换代理端口 |
| `StableProxyPort` | `:7776` | 最低延迟代理端口 |
| `ValidateURL` | `http://www.gstatic.com/generate_204` | 验证目标地址 |
| `IPQueryRateLimit` | `10` | IP 查询限流(次/秒) |
| `SourceFailThreshold` | `3` | 源降级阈值 |
| `SourceDisableThreshold` | `5` | 源禁用阈值 |
| `SourceCooldownMinutes` | `30` | 源禁用冷却时间(分钟) |
| `IPQueryRateLimit` | `10 次/秒` | IP 查询限流 |
| `SourceFailThreshold` | `3` | 源降级阈值(连续失败) |
| `SourceDisableThreshold` | `5` | 源禁用阈值(连续失败) |
| `SourceCooldownMinutes` | `30` | 源禁用冷却时间 |
| `MaxRetry` | `3` | 代理请求失败重试次数 |
**环境变量配置**(启动时读取):
| 环境变量 | 默认值 | 说明 |
| --- | --- | --- |
| `PROXY_AUTH_ENABLED` | `false` | 是否启用代理认证 |
| `PROXY_AUTH_USERNAME` | `proxy` | 代理认证用户名 |
| `PROXY_AUTH_PASSWORD` | 空 | 代理认证密码(原始密码,自动哈希) |
| `BLOCKED_COUNTRIES` | `CN` | 屏蔽的国家代码(逗号分隔,如 `CN,RU,KP`,留空=不屏蔽) |
## 🎨 WebUI 使用指南
@@ -415,23 +564,29 @@ GoProxy WebUI 支持**访客模式**和**管理员模式**
### 代理注册表
**表格字段**
- **Grade**质量等级S/A/B/C
- **Grade**质量等级S/A/B/C,基于延迟计算
- **Protocol**协议类型HTTP/SOCKS5
- **Address**代理地址host:port
- **Exit IP**:出口 IP
- **Location**:出口地理位置(国旗 + 国家代码 + 城市)
- **Latency**:延迟(毫秒,颜色编码)
- **Usage**:使用次数 / 成功次数
- **Action**删除按钮
- **Address**代理地址host:port,点击可复制
- **Exit IP**代理的出口 IP 地址
- **Location**:出口地理位置(国旗 emoji + 国家代码 + 城市)
- **Latency**连接延迟(毫秒,动态颜色编码:绿/黄/橙/红
- **Usage**:使用统计(使用总次数 / 成功次数,成功率指标)
- **Action**操作按钮(刷新单个代理、删除代理,管理员可见)
**操作功能**
- **筛选**All / HTTP / SOCKS5所有用户可用
- **点击复制地址**:点击代理地址单元格复制到剪贴板(所有用户可用)
- **Fetch Proxies**:手动触发智能抓取(⚡ 管理员专属
- **Refresh Latency**:重新验证所有代理并更新延迟(⚡ 管理员专属
- **刷新单个代理**:点击行内刷新按钮验证单个代理(⚡ 管理员专属)
- **删除代理**:点击行内删除按钮移除指定代理(⚡ 管理员专属)
- **Configure Pool**:打开配置界面(⚡ 管理员专属)
**所有用户可用**
- **协议筛选**:下拉选择协议类型(全部/HTTP/SOCKS5
- **国家筛选**:下拉选择出口国家(全部/动态国家列表,带国旗 emoji
- **点击复制地址**:点击代理地址单元格直接复制到剪贴板
- **查看数据**:池子状态、质量分布、系统日志
**管理员专属**(需登录):
- **Fetch Proxies**:手动触发智能抓取
- **Refresh Latency**:重新验证所有代理并更新延迟
- **刷新单个代理**:点击行内刷新按钮验证单个代理
- **删除代理**:点击行内删除按钮移除指定代理
- **Configure Pool**:打开配置界面修改池子参数
### 配置界面(⚡ 管理员专属)
@@ -488,9 +643,9 @@ GoProxy WebUI 支持**访客模式**和**管理员模式**
### 状态转换机制
```text
Healthy (总数≥80% 且 各协议≥80%槽位)
Healthy (总数≥95% 且 各协议≥80%槽位)
↓ 代理失效
Warning (总数<80% 或 任一协议<80%)
Warning (总数<95% 或 任一协议<80%)
↓ 继续失效
Critical (总数<50% 或 任一协议<20%槽位)
↓ 继续失效
@@ -499,12 +654,14 @@ Emergency (总数<10% 或 单协议缺失)
└─ 自动触发紧急抓取 ─┘
```
> 💡 **自动补充阈值**:当总数低于 95% 时进入 Warning 状态并触发自动补充,确保池子始终接近满容量运行。
### 抓取模式选择
| 池子状态 | 抓取模式 | 使用源 | 触发条件 |
| --- | --- | --- | --- |
| Emergency | 紧急模式 | 所有可用源 | 单协议缺失或总数<10% |
| Critical/Warning | 补充模式 | 快更新源 | 总数<80%或协议不均 |
| Critical/Warning | 补充模式 | 快更新源 | 总数<95%或协议不均 |
| Healthy | 优化模式 | 慢更新源随机2-3个 | 定时触发30分钟 |
### 质量分级标准
@@ -648,8 +805,8 @@ A:
### Q: 池子状态如何计算?
A:
- **Healthy**:总数 ≥80% 且各协议 ≥80% 槽位
- **Warning**:总数 <80% 或任一协议 <80% 槽位
- **Healthy**:总数 ≥95% 且各协议 ≥80% 槽位
- **Warning**:总数 <95% 或任一协议 <80% 槽位
- **Critical**:总数 <50% 或任一协议 <20% 槽位
- **Emergency**:总数 <10% 或单协议缺失
@@ -665,6 +822,31 @@ A:
- IP 查询有限流10 次/秒)
- 部分代理可能不支持 IP 查询
- 系统会在后续健康检查中补全信息
- 没有出口信息的代理会在启动时被自动清理
### Q: 如何配置地理过滤?
A:
通过 `BLOCKED_COUNTRIES` 环境变量配置需要屏蔽的国家:
```bash
# 默认屏蔽中国大陆CN
BLOCKED_COUNTRIES=CN
# 屏蔽多个国家(逗号分隔)
BLOCKED_COUNTRIES=CN,RU,KP
# 不屏蔽任何国家(留空)
BLOCKED_COUNTRIES=
```
**工作机制**
- **验证阶段**:检测到屏蔽国家出口直接拒绝入池
- **启动清理**:自动删除数据库中屏蔽国家的代理
- **精确匹配**:使用 ISO 3166-1 alpha-2 国家代码CN、HK、US 等)
**常用国家代码**`CN`=中国大陆 | `HK`=香港 | `RU`=俄罗斯 | `US`=美国 | `JP`=日本 | `SG`=新加坡
> 📖 **详细配置指南**:更多国家代码、使用场景、测试方法,请查看 [`GEO_FILTER.md`](./GEO_FILTER.md)
### Q: 资源消耗如何?
A:
@@ -675,11 +857,24 @@ A:
- 按需抓取,避免无效流量
- 健康检查批次小20 个)
## 📚 详细设计文档
### Q: 代理服务如何启用认证?
A:
1. 编辑 `.env` 文件:
```bash
PROXY_AUTH_ENABLED=true
PROXY_AUTH_USERNAME=myuser
PROXY_AUTH_PASSWORD=mypass
```
2. 重启服务:`docker compose up -d`
3. 客户端使用:`http://myuser:mypass@server-ip:7777`
完整的架构设计、模块说明、配置策略、资源优化方案,请查看:
详细说明和测试方法请查看 [`test/AUTH_TEST.md`](./test/AUTH_TEST.md)
👉 [POOL_DESIGN.md](./POOL_DESIGN.md)
### Q: 代理认证和 WebUI 认证有什么区别?
A:
- **代理认证**:保护 7776/7777 代理服务端口,防止代理被滥用
- **WebUI 认证**:保护 7778 管理后台,区分访客和管理员权限
- 两者独立配置,互不影响
## 🛠️ 开发与调试
@@ -759,7 +954,18 @@ proxy from 🇯🇵 198.51.100.12: seq=5 time=890ms
50 requests transmitted, 47 received, 3 failed, 6.0% packet loss
```
详细测试指南请查看:👉 [test/TEST_GUIDE.md](./test/TEST_GUIDE.md)
**测试认证功能**
```bash
# 启用认证后测试
curl -x http://myuser:mypass@127.0.0.1:7777 https://httpbin.org/ip
# 无认证请求(应该返回 407 错误)
curl -x http://127.0.0.1:7777 https://httpbin.org/ip
```
**更多测试指南**
- 基础功能测试:[`test/TEST_GUIDE.md`](./test/TEST_GUIDE.md)
- 认证功能测试:[`test/AUTH_TEST.md`](./test/AUTH_TEST.md)
## 🙏 致谢与声明
@@ -778,10 +984,13 @@ proxy from 🇯🇵 198.51.100.12: seq=5 time=890ms
- 🆕 **分层健康管理**:批次检查、智能跳过 S 级、定时优化轮换
- 🆕 **智能重试机制**:自动故障切换、失败即删除、防重复尝试
- 🆕 **双端口服务**7777 随机轮换IP 多样性)+ 7776 最低延迟(稳定连接)
- 🆕 **代理认证保护**:可选 Basic Auth 认证,对外开放时保护代理服务不被滥用
- 🆕 **黑客风格 WebUI**Matrix 美学、实时仪表盘、完整配置界面、中英文切换
- 🆕 **双角色权限**:访客模式(只读)+ 管理员模式(完全控制),可安全公网开放
- 🆕 **扩展存储层**:质量等级、使用统计、源状态管理
- 🆕 **测试套件**Bash/Go/Python 三种测试脚本,持续运行模式,显示国旗 emoji
- 🆕 **CI/CD 自动化**GitHub Actions 自动构建多架构镜像amd64/arm64双仓库发布
- 🆕 **环境变量配置**docker-compose + .env 文件,灵活配置各种部署场景
感谢原作者提供的基础实现,让我们能够在此之上构建更强大的代理池系统。