mirror of
https://github.com/isboyjc/GoProxy.git
synced 2026-05-24 09:49:53 +08:00
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:
385
README.md
385
README.md
@@ -2,10 +2,39 @@
|
||||
|
||||
> **智能代理池系统** — 基于 Go 的轻量级、低资源消耗、自适应的代理池服务
|
||||
|
||||
[](https://hub.docker.com/r/isboyjc/goproxy)
|
||||
[](https://github.com/isboyjc/GoProxy/pkgs/container/goproxy)
|
||||
[](LICENSE)
|
||||
[](https://go.dev/)
|
||||
|
||||
GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格验证(出口 IP + 位置 + 延迟)后加入智能代理池,对外提供统一的 HTTP 代理服务。系统采用质量分级、智能补充、自动优化等机制,确保代理池始终保持高质量和稳定性。
|
||||
|
||||
**GitHub**:[github.com/isboyjc/GoProxy](https://github.com/isboyjc/GoProxy)
|
||||
|
||||

|
||||
|
||||
## 📑 目录
|
||||
|
||||
- [核心特性](#-核心特性)
|
||||
- [项目结构](#-项目结构)
|
||||
- [快速开始](#-快速开始)
|
||||
- [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 文件,灵活配置各种部署场景
|
||||
|
||||
感谢原作者提供的基础实现,让我们能够在此之上构建更强大的代理池系统。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user