mirror of
https://github.com/isboyjc/GoProxy.git
synced 2026-07-09 06:22:01 +08:00
feat: ✨ add SOCKS5 proxy support and enhance configuration
- Introduced SOCKS5 proxy functionality with separate ports for random rotation and lowest latency. - Updated `.env.example` and `docker-compose.yml` to include SOCKS5 port configurations. - Enhanced `main.go` to initialize and start SOCKS5 servers alongside existing HTTP proxies. - Revised README to document new SOCKS5 features, including usage examples and testing scripts. - Improved proxy selection logic in the storage layer to support SOCKS5 protocol.
This commit is contained in:
447
README.md
447
README.md
@@ -7,12 +7,23 @@
|
||||
[](LICENSE)
|
||||
[](https://go.dev/)
|
||||
|
||||
GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格验证(出口 IP + 位置 + 延迟)后加入智能代理池,对外提供统一的 HTTP 代理服务。系统采用质量分级、智能补充、自动优化等机制,确保代理池始终保持高质量和稳定性。
|
||||
GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格验证(出口 IP + 位置 + 延迟)后加入智能代理池,对外提供 **HTTP 和 SOCKS5 双协议**代理服务。系统采用质量分级、智能补充、自动优化等机制,确保代理池始终保持高质量和稳定性。
|
||||
|
||||
**GitHub**:[github.com/isboyjc/GoProxy](https://github.com/isboyjc/GoProxy)
|
||||
|
||||

|
||||
|
||||
## 📋 快速导航
|
||||
|
||||
- [✨ 核心特性](#-核心特性) - 智能池子、按需抓取、健康管理、双协议支持
|
||||
- [🔌 HTTP vs SOCKS5 协议对比](#-http-vs-socks5-协议对比) - 协议区别、使用建议
|
||||
- [🚀 快速开始](#-快速开始) - 本地运行、端口说明、代理使用
|
||||
- [🐳 Docker 部署](#-docker-部署) - 容器化部署、环境配置、安全建议
|
||||
- [⚙️ 配置说明](#️-配置说明) - 完整参数详解、性能优化
|
||||
- [🛠️ 开发与调试](#️-开发与调试) - 日志查看、数据库操作
|
||||
- [🧪 测试代理服务](#-测试代理服务) - 测试脚本、持续测试、认证测试
|
||||
- [❓ 常见问题](#-常见问题) - SOCKS5 使用、浏览器配置、故障排查
|
||||
|
||||
## ✨ 核心特性
|
||||
|
||||
### 🎯 智能池子机制
|
||||
@@ -41,12 +52,17 @@ GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格
|
||||
- **用户无感知**:自动重试在服务端完成,用户只会收到成功响应或最终失败提示
|
||||
- **防重复尝试**:已尝试过的失败代理不会在同一请求中再次使用
|
||||
|
||||
### 🚪 双端口策略
|
||||
- **7777 端口(随机轮换)**:每次请求随机选择代理,IP 高度分散,适合爬虫和数据采集
|
||||
- **7776 端口(最低延迟)**:固定使用延迟最低的代理,除非失败才切换,适合长连接和流媒体
|
||||
- **自动切换**:两个端口都支持失败自动重试,7776 失败后切换到次优代理
|
||||
- **共享池子**:两个端口使用同一个代理池,统一管理和优化
|
||||
- **可选认证**:支持 Basic Auth 认证保护,对外开放时可启用
|
||||
### 🚪 多端口多协议支持
|
||||
- **双协议支持**:同时提供 HTTP 和 SOCKS5 协议服务,满足不同应用需求
|
||||
- **双模式策略**:每种协议都提供随机轮换和最低延迟两种模式
|
||||
- **4 个服务端口**:
|
||||
- `7777` - HTTP 随机轮换(IP 多样性,适合爬虫)
|
||||
- `7776` - HTTP 最低延迟(稳定连接,适合流媒体)
|
||||
- `7779` - SOCKS5 随机轮换(IP 多样性,适合浏览器/游戏)
|
||||
- `7780` - SOCKS5 最低延迟(稳定连接,适合固定应用)
|
||||
- **自动切换**:所有端口都支持失败自动重试,智能切换备用代理
|
||||
- **共享池子**:四个端口使用同一个代理池,统一管理和优化
|
||||
- **可选认证**:支持 Basic Auth(HTTP)和用户名/密码认证(SOCKS5),对外开放时可启用
|
||||
|
||||
### 🎨 黑客风格 WebUI
|
||||
- **Matrix 美学**:荧光绿 + 纯黑背景,CRT 扫描线效果,JetBrains Mono 等宽字体
|
||||
@@ -58,15 +74,40 @@ GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格
|
||||
- **交互优化**:点击地址复制、单个代理刷新、实时日志倒计时
|
||||
|
||||
### 📊 适用场景
|
||||
- **Web 开发测试**:HTTP 代理测试 API、爬虫开发、数据采集
|
||||
- **浏览器代理**:SOCKS5 协议配置浏览器代理,访问受限网站
|
||||
- **命令行工具**:curl、wget、git 等工具使用 HTTP 代理
|
||||
- **应用代理**:需要 SOCKS5 协议的应用(SSH、游戏、聊天工具)
|
||||
- **小型 VPS**:低资源消耗(固定池子 + 按需抓取 + 限流查询)
|
||||
- **稳定需求**:自动剔除失败代理,始终保持健康池子
|
||||
- **质量优先**:S/A 级代理优先使用,自动优化延迟
|
||||
|
||||
### 🔌 HTTP vs SOCKS5 协议对比
|
||||
|
||||
| 特性 | HTTP 代理 | SOCKS5 代理 |
|
||||
|------|----------|-------------|
|
||||
| **协议支持** | 仅 HTTP/HTTPS | 所有 TCP 协议(HTTP/HTTPS/SSH/FTP/游戏等) |
|
||||
| **工作层级** | 应用层(Layer 7) | 会话层(Layer 5) |
|
||||
| **浏览器支持** | ✅ 良好 | ✅ 更好(无协议限制) |
|
||||
| **命令行工具** | ✅ curl/wget 原生支持 | ⚠️ 部分工具需要额外配置 |
|
||||
| **非 HTTP 应用** | ❌ 不支持 | ✅ 完全支持(SSH/游戏/聊天) |
|
||||
| **UDP 支持** | ❌ 不支持 | ✅ 支持(SOCKS5 协议特性) |
|
||||
| **性能开销** | 较低 | 稍高 |
|
||||
| **认证方式** | Basic Auth | 用户名/密码 |
|
||||
|
||||
**快速选择建议**:
|
||||
- 🌐 **HTTP 代理**(端口 7776/7777):适合 Web 开发、API 测试、爬虫、数据采集
|
||||
- 🔒 **SOCKS5 代理**(端口 7779/7780):适合浏览器、SSH 隧道、游戏、聊天应用、需要完整协议支持的场景
|
||||
|
||||
**架构设计**:
|
||||
- HTTP 代理服务:可使用池中的 HTTP 或 SOCKS5 上游代理
|
||||
- SOCKS5 代理服务:**仅使用 SOCKS5 上游代理**(因为许多免费 HTTP 代理不支持 HTTPS CONNECT 方法)
|
||||
|
||||
### 📝 扩展文档
|
||||
|
||||
- [地理过滤配置指南](GEO_FILTER.md) - 国家代码、使用场景、测试方法
|
||||
- [数据目录说明](DATA_DIRECTORY.md) - 数据库、配置文件、备份恢复
|
||||
- [测试脚本使用](test/README.md) - Bash/Go/Python 测试脚本详细说明
|
||||
- [测试脚本使用](test/README.md) - HTTP + SOCKS5 测试脚本详细说明
|
||||
- [架构设计文档](POOL_DESIGN.md) - 完整的系统设计和实现细节
|
||||
|
||||
## 📦 项目结构
|
||||
@@ -84,11 +125,14 @@ GoProxy 从多个公开代理源自动抓取 HTTP/SOCKS5 代理,通过严格
|
||||
├── checker/ # 🆕 分批健康检查器
|
||||
├── optimizer/ # 🆕 优化轮换器(定时优化池子质量)
|
||||
├── storage/ # 🆕 扩展存储层(质量等级、使用统计、源状态表)
|
||||
├── proxy/ # 🆕 对外 HTTP 代理服务(双端口 + 可选认证)
|
||||
├── proxy/ # 🆕 对外代理服务(HTTP + SOCKS5 双协议,4 端口 + 可选认证)
|
||||
│ ├── server.go # HTTP 代理服务器
|
||||
│ └── socks5_server.go # SOCKS5 代理服务器
|
||||
├── webui/ # 🆕 黑客风格 WebUI(健康仪表盘、配置界面、RBAC)
|
||||
├── logger/ # 内存日志收集
|
||||
├── test/ # 🧪 测试脚本与文档
|
||||
│ ├── test_proxy.sh # Bash 测试脚本
|
||||
│ ├── test_proxy.sh # HTTP 代理测试脚本(Bash)
|
||||
│ ├── test_socks5.sh # SOCKS5 代理测试脚本(Bash)
|
||||
│ ├── test_proxy.go # Go 测试脚本
|
||||
│ ├── test_proxy.py # Python 测试脚本
|
||||
│ └── README.md # 测试脚本使用说明
|
||||
@@ -134,22 +178,34 @@ go build -o proxygo .
|
||||
- 状态监控(每 30 秒)
|
||||
- 健康检查(默认 5 分钟)
|
||||
- 优化轮换(默认 30 分钟)
|
||||
7. 启动两个代理服务(支持可选认证):
|
||||
- `:7776` - 最低延迟模式(稳定连接)
|
||||
- `:7777` - 随机轮换模式(IP 多样性)
|
||||
7. 启动四个代理服务(支持可选认证):
|
||||
- `:7776` - HTTP 最低延迟模式(稳定连接)
|
||||
- `:7777` - HTTP 随机轮换模式(IP 多样性)
|
||||
- `:7779` - SOCKS5 随机轮换模式(IP 多样性)
|
||||
- `:7780` - SOCKS5 最低延迟模式(稳定连接)
|
||||
|
||||
### 默认端口
|
||||
- **代理服务(随机轮换)**:`7777` - 每次请求随机选择代理,IP 多样性高
|
||||
- **代理服务(最低延迟)**:`7776` - 固定使用延迟最低的代理,性能优先
|
||||
|
||||
#### HTTP 代理端口
|
||||
- **7777 端口(HTTP 随机轮换)**:每次请求随机选择代理,IP 多样性高
|
||||
- **7776 端口(HTTP 最低延迟)**:固定使用延迟最低的代理,性能优先
|
||||
|
||||
#### SOCKS5 代理端口
|
||||
- **7779 端口(SOCKS5 随机轮换)**:每次连接随机选择代理,IP 多样性高
|
||||
- **7780 端口(SOCKS5 最低延迟)**:固定使用延迟最低的代理,性能优先
|
||||
|
||||
#### 管理端口
|
||||
- **WebUI**:`7778`
|
||||
- **默认密码**:`goproxy`(可通过 `WEBUI_PASSWORD` 环境变量自定义)
|
||||
- **访问方式**:本地使用 `localhost`,远程使用服务器 IP 地址
|
||||
|
||||
### 使用代理
|
||||
|
||||
GoProxy 提供**两个代理端口**,满足不同场景需求:
|
||||
GoProxy 提供**四个代理端口**,支持 HTTP 和 SOCKS5 两种协议,满足不同场景需求:
|
||||
|
||||
#### 🎲 7777 端口 - 随机轮换模式
|
||||
#### 🌐 HTTP 协议代理
|
||||
|
||||
##### 🎲 7777 端口 - HTTP 随机轮换模式
|
||||
|
||||
适合需要 **IP 多样性** 的场景(爬虫、数据采集、负载均衡):
|
||||
|
||||
@@ -166,7 +222,7 @@ curl -x http://your-server-ip:7777 https://httpbin.org/ip
|
||||
- 优先使用高质量(S/A 级)代理
|
||||
- IP 地址高度分散
|
||||
|
||||
#### ⚡ 7776 端口 - 最低延迟模式
|
||||
##### ⚡ 7776 端口 - HTTP 最低延迟模式
|
||||
|
||||
适合需要 **稳定连接** 的场景(长连接、流媒体、实时通信):
|
||||
|
||||
@@ -184,9 +240,49 @@ curl -x http://your-server-ip:7776 https://httpbin.org/ip
|
||||
- 失败时自动删除并切换到下一个最低延迟代理
|
||||
- 性能和稳定性最优
|
||||
|
||||
#### 🔌 SOCKS5 协议代理
|
||||
|
||||
##### 🎲 7779 端口 - SOCKS5 随机轮换模式
|
||||
|
||||
适合需要 **原生 SOCKS5** 和 **IP 多样性** 的场景:
|
||||
|
||||
```bash
|
||||
# 使用 curl(需要 7.21.7+)
|
||||
curl --socks5 localhost:7779 https://httpbin.org/ip
|
||||
|
||||
# 远程使用
|
||||
curl --socks5 your-server-ip:7779 https://httpbin.org/ip
|
||||
|
||||
# 使用 proxychains
|
||||
echo "socks5 127.0.0.1 7779" > ~/.proxychains.conf
|
||||
proxychains4 curl https://httpbin.org/ip
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- 原生 SOCKS5 协议,更广泛的应用支持
|
||||
- 每次连接随机选择代理
|
||||
- 支持 TCP 和 UDP(如果上游代理支持)
|
||||
|
||||
##### ⚡ 7780 端口 - SOCKS5 最低延迟模式
|
||||
|
||||
适合需要 **SOCKS5 协议** 和 **稳定连接** 的场景:
|
||||
|
||||
```bash
|
||||
# 本地使用
|
||||
curl --socks5 localhost:7780 https://httpbin.org/ip
|
||||
|
||||
# 远程使用
|
||||
curl --socks5 your-server-ip:7780 https://httpbin.org/ip
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- 固定使用延迟最低的代理
|
||||
- 适合需要 SOCKS5 协议的应用(如浏览器、游戏客户端)
|
||||
- 最佳性能和稳定性
|
||||
|
||||
#### 环境变量配置
|
||||
|
||||
**本地使用**:
|
||||
**HTTP 代理**:
|
||||
```bash
|
||||
# 使用随机模式
|
||||
export http_proxy=http://localhost:7777
|
||||
@@ -195,25 +291,77 @@ export https_proxy=http://localhost:7777
|
||||
# 或使用稳定模式
|
||||
export http_proxy=http://localhost:7776
|
||||
export https_proxy=http://localhost:7776
|
||||
|
||||
# 远程使用(带认证)
|
||||
export http_proxy=http://proxy:your_password@your-server-ip:7777
|
||||
export https_proxy=http://proxy:your_password@your-server-ip:7777
|
||||
```
|
||||
|
||||
**远程使用(带认证)**:
|
||||
**SOCKS5 代理**(更多应用支持):
|
||||
```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
|
||||
# 使用随机模式
|
||||
export ALL_PROXY=socks5://localhost:7779
|
||||
|
||||
# 或使用稳定模式
|
||||
export ALL_PROXY=socks5://localhost:7780
|
||||
|
||||
# 远程使用(带认证)
|
||||
export ALL_PROXY=socks5://proxy:your_password@your-server-ip:7779
|
||||
```
|
||||
|
||||
#### 端口对比
|
||||
|
||||
| 特性 | 7777(随机轮换) | 7776(最低延迟) |
|
||||
|------|-----------------|-----------------|
|
||||
| **选择策略** | 随机选择(优先高质量) | 固定使用延迟最低的 |
|
||||
| **IP 多样性** | ⭐⭐⭐⭐⭐ 高度分散 | ⭐ 基本固定 |
|
||||
| **连接稳定性** | ⭐⭐⭐ 每次切换 | ⭐⭐⭐⭐⭐ 固定不变 |
|
||||
| **性能表现** | ⭐⭐⭐⭐ 平均延迟 | ⭐⭐⭐⭐⭐ 最优延迟 |
|
||||
| **适用场景** | 爬虫、数据采集、防封禁 | 长连接、流媒体、下载 |
|
||||
| **失败切换** | 自动重试 3 次 | 失败后切换到次优代理 |
|
||||
| 端口 | 协议 | 模式 | IP 多样性 | 稳定性 | 性能 | 适用场景 |
|
||||
|------|------|------|----------|--------|------|---------|
|
||||
| **7777** | HTTP | 随机轮换 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 爬虫、数据采集 |
|
||||
| **7776** | HTTP | 最低延迟 | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 长连接、流媒体 |
|
||||
| **7779** | SOCKS5 | 随机轮换 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 浏览器、游戏、SSH |
|
||||
| **7780** | SOCKS5 | 最低延迟 | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 稳定应用连接 |
|
||||
|
||||
#### 协议选择建议
|
||||
|
||||
**何时使用 HTTP 代理(7776/7777)**:
|
||||
- 简单的 HTTP/HTTPS 请求
|
||||
- curl、wget 等命令行工具
|
||||
- 大多数编程语言的 HTTP 客户端
|
||||
|
||||
**何时使用 SOCKS5 代理(7779/7780)**:
|
||||
- 需要代理非 HTTP 协议(如 SSH、FTP、游戏)
|
||||
- 浏览器代理设置(SOCKS5 支持更好)
|
||||
- 需要 UDP 支持的应用
|
||||
- 某些应用只支持 SOCKS5 协议
|
||||
|
||||
#### SOCKS5 使用示例
|
||||
|
||||
**Python**:
|
||||
```python
|
||||
import requests
|
||||
|
||||
proxies = {
|
||||
'http': 'socks5://localhost:7779',
|
||||
'https': 'socks5://localhost:7779'
|
||||
}
|
||||
response = requests.get('https://httpbin.org/ip', proxies=proxies)
|
||||
```
|
||||
|
||||
**Node.js**:
|
||||
```javascript
|
||||
const SocksProxyAgent = require('socks-proxy-agent');
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
const agent = new SocksProxyAgent('socks5://localhost:7779');
|
||||
fetch('https://httpbin.org/ip', { agent }).then(res => res.json());
|
||||
```
|
||||
|
||||
**浏览器配置**:
|
||||
- 类型:SOCKS5
|
||||
- 地址:`localhost` 或服务器 IP
|
||||
- 端口:`7779`(随机)或 `7780`(稳定)
|
||||
|
||||
**SSH 隧道**:
|
||||
```bash
|
||||
ssh -o ProxyCommand='nc -X 5 -x localhost:7779 %h %p' user@remote-server
|
||||
```
|
||||
|
||||
#### 自动重试机制说明
|
||||
|
||||
@@ -283,6 +431,8 @@ docker run -d --name proxygo \
|
||||
-p 7776:7776 \
|
||||
-p 7777:7777 \
|
||||
-p 7778:7778 \
|
||||
-p 7779:7779 \
|
||||
-p 7780:7780 \
|
||||
-e WEBUI_PASSWORD=your_password \
|
||||
-v goproxy-data:/app/data \
|
||||
ghcr.io/isboyjc/goproxy:latest
|
||||
@@ -327,16 +477,18 @@ docker compose up -d
|
||||
| `PROXY_AUTH_USERNAME` | `proxy` | 代理认证用户名 |
|
||||
| `PROXY_AUTH_PASSWORD` | 空 | 代理认证密码 |
|
||||
| `WEBUI_PASSWORD` | `goproxy` | WebUI 登录密码 |
|
||||
| `STABLE_PORT` | `7776` | 最低延迟代理端口 |
|
||||
| `RANDOM_PORT` | `7777` | 随机轮换代理端口 |
|
||||
| `STABLE_PORT` | `7776` | HTTP 最低延迟代理端口 |
|
||||
| `RANDOM_PORT` | `7777` | HTTP 随机轮换代理端口 |
|
||||
| `WEBUI_PORT` | `7778` | WebUI 管理端口 |
|
||||
| `SOCKS5_STABLE_PORT` | `7780` | SOCKS5 最低延迟代理端口 |
|
||||
| `SOCKS5_RANDOM_PORT` | `7779` | SOCKS5 随机轮换代理端口 |
|
||||
|
||||
完整环境变量列表请查看 `.env.example` 文件。
|
||||
|
||||
**⚠️ 生产部署注意事项**:
|
||||
- 如使用 Dokploy、Coolify 等平台部署,确保 `docker-compose.yml` 中配置了平台网络(如 `dokploy-network`)
|
||||
- WebUI 端口可通过平台的域名功能访问,无需手动配置端口绑定
|
||||
- 代理端口(7776/7777)通过 `IP:端口` 直接访问,**强烈建议启用认证**
|
||||
- 代理端口(7776/7777/7779/7780)通过 `IP:端口` 直接访问,**强烈建议启用认证**
|
||||
|
||||
**常用配置示例**:
|
||||
|
||||
@@ -371,7 +523,7 @@ docker compose up -d
|
||||
|
||||
### 安全部署配置
|
||||
|
||||
**默认配置**:代理服务对外开放(端口 7776、7777),WebUI 对外开放(端口 7778)。
|
||||
**默认配置**:代理服务对外开放(端口 7776、7777、7779、7780),WebUI 对外开放(端口 7778)。
|
||||
|
||||
**⚠️ 重要提示**:
|
||||
|
||||
@@ -393,15 +545,21 @@ WEBUI_PASSWORD=admin_pass
|
||||
**客户端使用(带认证)**:
|
||||
|
||||
```bash
|
||||
# 环境变量方式
|
||||
# HTTP 代理 - 环境变量方式
|
||||
export http_proxy=http://myuser:secure_pass_123@server-ip:7777
|
||||
export https_proxy=http://myuser:secure_pass_123@server-ip:7777
|
||||
|
||||
# curl 直接指定
|
||||
# HTTP 代理 - 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': '...'}
|
||||
# SOCKS5 代理 - curl 使用
|
||||
curl --socks5 myuser:secure_pass_123@server-ip:7779 https://httpbin.org/ip
|
||||
|
||||
# Python - HTTP 代理
|
||||
proxies = {'http': 'http://myuser:secure_pass_123@server-ip:7777', 'https': 'http://myuser:secure_pass_123@server-ip:7777'}
|
||||
|
||||
# Python - SOCKS5 代理
|
||||
proxies = {'http': 'socks5://myuser:secure_pass_123@server-ip:7779', 'https': 'socks5://myuser:secure_pass_123@server-ip:7779'}
|
||||
```
|
||||
|
||||
## ⚙️ 配置说明
|
||||
@@ -433,8 +591,10 @@ proxies = {'http': 'http://myuser:secure_pass_123@server-ip:7777', 'https': '...
|
||||
|
||||
| 参数 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `proxy_port` | `:7777` | 随机轮换代理端口 |
|
||||
| `stable_proxy_port` | `:7776` | 最低延迟代理端口 |
|
||||
| `proxy_port` | `:7777` | HTTP 随机轮换代理端口 |
|
||||
| `stable_proxy_port` | `:7776` | HTTP 最低延迟代理端口 |
|
||||
| `socks5_port` | `:7779` | SOCKS5 随机轮换代理端口 |
|
||||
| `stable_socks5_port` | `:7780` | SOCKS5 最低延迟代理端口 |
|
||||
| `webui_port` | `:7778` | WebUI 端口 |
|
||||
|
||||
**代理认证配置**
|
||||
@@ -443,9 +603,12 @@ proxies = {'http': 'http://myuser:secure_pass_123@server-ip:7777', 'https': '...
|
||||
| --- | --- | --- |
|
||||
| `proxy_auth_enabled` | `false` | 是否启用代理认证(对外开放时建议启用) |
|
||||
| `proxy_auth_username` | `proxy` | 代理认证用户名 |
|
||||
| `proxy_auth_password_hash` | 空 | 代理认证密码 SHA256 哈希(通过环境变量 `PROXY_AUTH_PASSWORD` 设置原始密码) |
|
||||
| `proxy_auth_password_hash` | 空 | 代理认证密码 SHA256 哈希(HTTP Basic Auth) |
|
||||
|
||||
> 💡 **注意**:代理认证配置通过**环境变量**设置,不在 `config.json` 中。启动时从 `PROXY_AUTH_ENABLED`、`PROXY_AUTH_USERNAME`、`PROXY_AUTH_PASSWORD` 环境变量读取。
|
||||
> 💡 **注意**:
|
||||
> - 代理认证配置通过**环境变量**设置,不在 `config.json` 中
|
||||
> - 启动时从 `PROXY_AUTH_ENABLED`、`PROXY_AUTH_USERNAME`、`PROXY_AUTH_PASSWORD` 环境变量读取
|
||||
> - **HTTP 代理**使用 Basic Auth(密码哈希),**SOCKS5 代理**使用用户名/密码认证(明文传输,建议内网使用)
|
||||
|
||||
**池子容量配置**
|
||||
|
||||
@@ -916,13 +1079,16 @@ A:
|
||||
PROXY_AUTH_PASSWORD=mypass
|
||||
```
|
||||
2. 重启服务:`docker compose up -d`
|
||||
3. 客户端使用:`http://myuser:mypass@server-ip:7777`
|
||||
3. 客户端使用:
|
||||
- HTTP:`http://myuser:mypass@server-ip:7777`
|
||||
- SOCKS5:`socks5://myuser:mypass@server-ip:7779`
|
||||
|
||||
### Q: 代理认证和 WebUI 认证有什么区别?
|
||||
A:
|
||||
- **代理认证**:保护 7776/7777 代理服务端口,防止代理被滥用
|
||||
- **代理认证**:保护代理服务端口(7776/7777/7779/7780),防止代理被滥用
|
||||
- **WebUI 认证**:保护 7778 管理后台,区分访客和管理员权限
|
||||
- 两者独立配置,互不影响
|
||||
- 启用代理认证时,HTTP 和 SOCKS5 代理都需要认证
|
||||
|
||||
## 🛠️ 开发与调试
|
||||
|
||||
@@ -937,6 +1103,7 @@ A:
|
||||
- `[health]`:健康检查器
|
||||
- `[optimize]`:优化器
|
||||
- `[monitor]`:状态监控器
|
||||
- `[socks5]`:SOCKS5 代理服务器(握手、认证、连接建立)
|
||||
|
||||
### 数据库操作
|
||||
|
||||
@@ -956,35 +1123,52 @@ sqlite3 data/proxy.db "DELETE FROM proxies;"
|
||||
|
||||
## 🧪 测试代理服务
|
||||
|
||||
项目提供了三种测试脚本,用于验证代理服务功能和性能(位于 `test/` 目录)。
|
||||
项目提供了多种测试脚本,用于验证 HTTP 和 SOCKS5 代理服务功能和性能(位于 `test/` 目录)。
|
||||
|
||||
### 快速测试
|
||||
|
||||
**HTTP 代理测试**:
|
||||
```bash
|
||||
# 测试随机轮换模式(默认 7777 端口)
|
||||
# 测试 HTTP 随机轮换模式(7777 端口)
|
||||
./test/test_proxy.sh
|
||||
|
||||
# 测试最低延迟模式(7776 端口)
|
||||
# 测试 HTTP 最低延迟模式(7776 端口)
|
||||
./test/test_proxy.sh 7776
|
||||
|
||||
# 使用 Go 脚本
|
||||
go run test/test_proxy.go # 默认 7777
|
||||
go run test/test_proxy.go 7776 # 测试 7776
|
||||
# 使用 Go/Python 脚本
|
||||
go run test/test_proxy.go 7777
|
||||
python test/test_proxy.py 7776
|
||||
```
|
||||
|
||||
# 使用 Python 脚本
|
||||
python test/test_proxy.py # 默认 7777
|
||||
python test/test_proxy.py 7776 # 测试 7776
|
||||
**SOCKS5 代理测试**:
|
||||
```bash
|
||||
# 测试 SOCKS5 随机轮换模式(7779 端口)
|
||||
./test/test_socks5.sh localhost 7779
|
||||
|
||||
# 测试 SOCKS5 最低延迟模式(7780 端口)
|
||||
./test/test_socks5.sh localhost 7780
|
||||
|
||||
# 持续测试 50 次
|
||||
./test/test_socks5.sh localhost 7779 50
|
||||
|
||||
# 按 Ctrl+C 停止测试并查看统计
|
||||
```
|
||||
|
||||
测试脚本特点:
|
||||
**HTTP 测试脚本**(`test_proxy.sh`)特点:
|
||||
- **持续运行模式**:类似 `ping` 命令,持续发送请求
|
||||
- 实时显示每次请求的出口 IP 和延迟
|
||||
- 实时显示每次请求的出口 IP、国家和延迟
|
||||
- 动态更新成功率统计
|
||||
- 验证代理轮换机制
|
||||
- 验证 HTTP 代理轮换机制
|
||||
- 按 `Ctrl+C` 停止并显示完整统计报告
|
||||
|
||||
**SOCKS5 测试脚本**(`test_socks5.sh`)特点:
|
||||
- 使用 `curl --socks5-hostname -k` 测试 SOCKS5 协议
|
||||
- 显示出口 IP、国家、延迟和时间戳
|
||||
- 验证 SOCKS5 代理轮换和稳定性
|
||||
- 支持指定测试次数或持续测试
|
||||
- 实时统计成功率和平均延迟
|
||||
- 自动跳过 SSL 证书验证(免费代理常有证书问题)
|
||||
|
||||
### 测试输出示例
|
||||
|
||||
```
|
||||
@@ -1004,15 +1188,153 @@ proxy from 🇯🇵 198.51.100.12: seq=5 time=890ms
|
||||
|
||||
**测试认证功能**:
|
||||
```bash
|
||||
# 启用认证后测试
|
||||
# HTTP 代理 - 带认证
|
||||
curl -x http://myuser:mypass@localhost:7777 https://httpbin.org/ip
|
||||
|
||||
# 无认证请求(应该返回 407 错误)
|
||||
# HTTP 代理 - 无认证(应该返回 407 错误)
|
||||
curl -x http://localhost:7777 https://httpbin.org/ip
|
||||
|
||||
# SOCKS5 代理 - 带认证
|
||||
curl --socks5 myuser:mypass@localhost:7779 https://httpbin.org/ip
|
||||
|
||||
# SOCKS5 代理 - 无认证(应该连接失败)
|
||||
curl --socks5 localhost:7779 https://httpbin.org/ip
|
||||
```
|
||||
|
||||
**测试脚本使用**:[`test/README.md`](./test/README.md)
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
### Q1: HTTP 和 SOCKS5 代理有什么区别?
|
||||
|
||||
**简单理解**:
|
||||
- **HTTP 代理**:专门为 HTTP/HTTPS 设计,简单易用,命令行工具支持好
|
||||
- **SOCKS5 代理**:通用代理协议,支持所有 TCP/UDP 协议,功能更强大
|
||||
|
||||
**详细对比**见上方 [HTTP vs SOCKS5 协议对比](#-http-vs-socks5-协议对比) 章节。
|
||||
|
||||
### Q2: 我应该使用哪个端口?
|
||||
|
||||
根据你的需求:
|
||||
|
||||
| 需求 | 推荐端口 | 理由 |
|
||||
|------|---------|------|
|
||||
| 🕷️ **爬虫/数据采集** | 7777(HTTP 随机) | IP 高度分散,降低封禁风险 |
|
||||
| 🎥 **流媒体/长连接** | 7776(HTTP 稳定) | 延迟最低,连接稳定 |
|
||||
| 🌐 **浏览器代理** | 7779(SOCKS5 随机) | 协议支持好,IP 多样性高 |
|
||||
| 🎮 **游戏/SSH/聊天** | 7780(SOCKS5 稳定) | 非 HTTP 协议,稳定优先 |
|
||||
|
||||
### Q3: SOCKS5 代理支持认证吗?
|
||||
|
||||
支持。当 `PROXY_AUTH_ENABLED=true` 时,所有代理端口(包括 SOCKS5)都需要认证:
|
||||
|
||||
```bash
|
||||
# SOCKS5 带认证
|
||||
curl --socks5 username:password@server-ip:7779 https://httpbin.org/ip
|
||||
|
||||
# 浏览器配置
|
||||
# SOCKS5 Host: server-ip
|
||||
# SOCKS5 Port: 7779
|
||||
# Username: username
|
||||
# Password: password
|
||||
```
|
||||
|
||||
### Q4: 为什么推荐"域名:端口"访问而非域名直接配置代理?
|
||||
|
||||
**技术限制**:
|
||||
- Cloudflare 等 DNS 托管服务的 HTTP 代理(橙云)**不支持非标准端口**(80/443 以外)
|
||||
- 即使关闭橙云,DNS 记录也无法直接指向容器内部端口
|
||||
|
||||
**正确做法**:
|
||||
```bash
|
||||
# ✅ 推荐方式:IP:端口 或 域名:端口
|
||||
curl -x http://proxy.example.com:7777 https://httpbin.org/ip
|
||||
curl -x http://123.45.67.89:7777 https://httpbin.org/ip
|
||||
|
||||
# ❌ 不支持:直接域名(除非反向代理到 80/443)
|
||||
curl -x http://proxy.example.com https://httpbin.org/ip
|
||||
```
|
||||
|
||||
### Q5: 如何测试 SOCKS5 代理是否正常工作?
|
||||
|
||||
使用提供的测试脚本:
|
||||
|
||||
```bash
|
||||
# 测试 SOCKS5 随机端口(7779)
|
||||
./test/test_socks5.sh localhost 7779
|
||||
|
||||
# 持续测试 50 次
|
||||
./test/test_socks5.sh localhost 7779 50
|
||||
```
|
||||
|
||||
或手动测试:
|
||||
```bash
|
||||
# curl 测试(-k 跳过 SSL 证书验证)
|
||||
curl -k --socks5-hostname localhost:7779 https://httpbin.org/ip
|
||||
|
||||
# 或测试 HTTP(不需要 SSL)
|
||||
curl --socks5-hostname localhost:7779 http://httpbin.org/ip
|
||||
|
||||
# Python 测试(需要安装 requests[socks])
|
||||
python3 -c "import requests; print(requests.get('https://httpbin.org/ip', proxies={'http': 'socks5://localhost:7779', 'https': 'socks5://localhost:7779'}).json())"
|
||||
```
|
||||
|
||||
### Q6: SOCKS5 代理失败率是否比 HTTP 高?
|
||||
|
||||
不会。两种服务质量和成功率相近,但**使用不同的上游代理**:
|
||||
- **HTTP 代理服务**(7776/7777):可使用池中的 HTTP 或 SOCKS5 上游代理
|
||||
- **SOCKS5 代理服务**(7779/7780):仅使用 SOCKS5 上游代理(因为许多免费 HTTP 代理不支持 HTTPS CONNECT)
|
||||
- 两种服务都支持自动重试和故障切换
|
||||
|
||||
### Q7: 如何在浏览器中配置 SOCKS5 代理?
|
||||
|
||||
**Chrome/Edge**(使用插件如 SwitchyOmega):
|
||||
1. 安装 Proxy SwitchyOmega 插件
|
||||
2. 新建情景模式 → SOCKS5
|
||||
3. 代理服务器:`server-ip` 或 `localhost`
|
||||
4. 代理端口:`7779`(随机)或 `7780`(稳定)
|
||||
5. 如启用认证,填写用户名和密码
|
||||
|
||||
**Firefox**:
|
||||
1. 设置 → 网络设置 → 手动代理配置
|
||||
2. SOCKS Host:`server-ip` 或 `localhost`
|
||||
3. Port:`7779` 或 `7780`
|
||||
4. 选择:SOCKS v5
|
||||
5. 勾选"通过 SOCKS 代理 DNS 查询"(可选)
|
||||
|
||||
### Q8: 如何查看 SOCKS5 服务的运行日志?
|
||||
|
||||
**本地运行**:
|
||||
```bash
|
||||
# 直接查看终端输出,SOCKS5 日志前缀为 [socks5]
|
||||
# 启动日志示例:
|
||||
# socks5 server listening on :7779 [随机轮换] [需认证 (用户: proxy)]
|
||||
# socks5 server listening on :7780 [最低延迟] [无认证]
|
||||
|
||||
# 连接日志示例:
|
||||
# [socks5] google.com:443 via 203.0.113.45:1080 established
|
||||
```
|
||||
|
||||
**Docker 部署**:
|
||||
```bash
|
||||
# 查看最近 50 行日志
|
||||
docker logs proxygo --tail 50
|
||||
|
||||
# 实时跟踪日志(含 SOCKS5)
|
||||
docker logs proxygo -f
|
||||
|
||||
# 过滤 SOCKS5 相关日志
|
||||
docker logs proxygo -f | grep socks5
|
||||
|
||||
# 查看 SOCKS5 错误日志
|
||||
docker logs proxygo --tail 200 | grep -i "socks5.*failed"
|
||||
```
|
||||
|
||||
**WebUI 查看**:
|
||||
- 访问 WebUI(端口 7778)→ 点击右上角 **Logs** 按钮
|
||||
- 实时日志面板会显示所有协议的连接和错误信息
|
||||
- 包括 SOCKS5 握手、认证、连接建立等详细日志
|
||||
|
||||
## 🙏 致谢与声明
|
||||
|
||||
本项目基于 [jonasen1988/proxygo](https://github.com/jonasen1988/proxygo) 进行魔改和增强。
|
||||
@@ -1029,12 +1351,13 @@ curl -x http://localhost:7777 https://httpbin.org/ip
|
||||
- 🆕 **按需抓取策略**:源分组、断路器保护、Emergency/Refill/Optimize 多模式
|
||||
- 🆕 **分层健康管理**:批次检查、智能跳过 S 级、定时优化轮换
|
||||
- 🆕 **智能重试机制**:自动故障切换、失败即删除、防重复尝试
|
||||
- 🆕 **双端口服务**:7777 随机轮换(IP 多样性)+ 7776 最低延迟(稳定连接)
|
||||
- 🆕 **代理认证保护**:可选 Basic Auth 认证,对外开放时保护代理服务不被滥用
|
||||
- 🆕 **双协议支持**:HTTP + SOCKS5 双协议,4 个服务端口(随机/稳定各 2 个)
|
||||
- 🆕 **双模式策略**:每种协议都支持随机轮换(IP 多样性)和最低延迟(稳定连接)
|
||||
- 🆕 **代理认证保护**:HTTP Basic Auth + SOCKS5 用户名/密码认证,对外开放时保护服务
|
||||
- 🆕 **黑客风格 WebUI**:Matrix 美学、实时仪表盘、完整配置界面、中英文切换
|
||||
- 🆕 **双角色权限**:访客模式(只读)+ 管理员模式(完全控制),可安全公网开放
|
||||
- 🆕 **扩展存储层**:质量等级、使用统计、源状态管理
|
||||
- 🆕 **测试套件**:Bash/Go/Python 三种测试脚本,持续运行模式,显示国旗 emoji
|
||||
- 🆕 **测试套件**:HTTP + SOCKS5 测试脚本,持续运行模式,显示国旗 emoji
|
||||
- 🆕 **CI/CD 自动化**:GitHub Actions 自动构建多架构镜像(amd64/arm64),双仓库发布
|
||||
- 🆕 **环境变量配置**:docker-compose + .env 文件,灵活配置各种部署场景
|
||||
|
||||
|
||||
Reference in New Issue
Block a user