mirror of
https://github.com/isboyjc/GoProxy.git
synced 2026-05-07 06:03:12 +08:00
- 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.
166 lines
3.4 KiB
Markdown
166 lines
3.4 KiB
Markdown
# 代理认证功能测试指南
|
||
|
||
本文档说明如何测试 GoProxy 的代理认证功能。
|
||
|
||
## 🔒 启用认证
|
||
|
||
### 使用 docker-compose
|
||
|
||
编辑 `.env` 文件:
|
||
|
||
```bash
|
||
PROXY_HOST=0.0.0.0
|
||
PROXY_AUTH_ENABLED=true
|
||
PROXY_AUTH_USERNAME=testuser
|
||
PROXY_AUTH_PASSWORD=testpass123
|
||
```
|
||
|
||
启动服务:
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
### 直接运行
|
||
|
||
设置环境变量后启动:
|
||
|
||
```bash
|
||
export PROXY_AUTH_ENABLED=true
|
||
export PROXY_AUTH_USERNAME=testuser
|
||
export PROXY_AUTH_PASSWORD=testpass123
|
||
go run .
|
||
```
|
||
|
||
## 🧪 测试认证功能
|
||
|
||
### 测试 1:无认证请求(应该失败)
|
||
|
||
```bash
|
||
curl -x http://127.0.0.1:7777 https://httpbin.org/ip -v
|
||
```
|
||
|
||
**预期结果**:
|
||
- HTTP 状态码:`407 Proxy Authentication Required`
|
||
- 响应头:`Proxy-Authenticate: Basic realm="GoProxy"`
|
||
|
||
### 测试 2:错误的用户名/密码(应该失败)
|
||
|
||
```bash
|
||
curl -x http://wronguser:wrongpass@127.0.0.1:7777 https://httpbin.org/ip -v
|
||
```
|
||
|
||
**预期结果**:
|
||
- HTTP 状态码:`407 Proxy Authentication Required`
|
||
|
||
### 测试 3:正确的认证(应该成功)
|
||
|
||
```bash
|
||
curl -x http://testuser:testpass123@127.0.0.1:7777 https://httpbin.org/ip
|
||
```
|
||
|
||
**预期结果**:
|
||
- HTTP 状态码:`200 OK`
|
||
- 返回代理的出口 IP 信息
|
||
|
||
### 测试 4:环境变量方式(应该成功)
|
||
|
||
```bash
|
||
export http_proxy=http://testuser:testpass123@127.0.0.1:7777
|
||
export https_proxy=http://testuser:testpass123@127.0.0.1:7777
|
||
curl https://httpbin.org/ip
|
||
```
|
||
|
||
### 测试 5:HTTPS CONNECT 隧道(应该成功)
|
||
|
||
```bash
|
||
curl -x http://testuser:testpass123@127.0.0.1:7776 https://www.google.com -I
|
||
```
|
||
|
||
## 🧩 多语言客户端示例
|
||
|
||
### Python (requests)
|
||
|
||
```python
|
||
import requests
|
||
|
||
proxies = {
|
||
'http': 'http://testuser:testpass123@127.0.0.1:7777',
|
||
'https': 'http://testuser:testpass123@127.0.0.1:7777',
|
||
}
|
||
|
||
response = requests.get('https://httpbin.org/ip', proxies=proxies)
|
||
print(response.text)
|
||
```
|
||
|
||
### Go
|
||
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"io"
|
||
"net/http"
|
||
"net/url"
|
||
)
|
||
|
||
func main() {
|
||
proxyURL, _ := url.Parse("http://testuser:testpass123@127.0.0.1:7777")
|
||
client := &http.Client{
|
||
Transport: &http.Transport{
|
||
Proxy: http.ProxyURL(proxyURL),
|
||
},
|
||
}
|
||
|
||
resp, err := client.Get("https://httpbin.org/ip")
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
body, _ := io.ReadAll(resp.Body)
|
||
fmt.Println(string(body))
|
||
}
|
||
```
|
||
|
||
### Node.js
|
||
|
||
```javascript
|
||
const axios = require('axios');
|
||
const HttpsProxyAgent = require('https-proxy-agent');
|
||
|
||
const proxyUrl = 'http://testuser:testpass123@127.0.0.1:7777';
|
||
const agent = new HttpsProxyAgent(proxyUrl);
|
||
|
||
axios.get('https://httpbin.org/ip', {
|
||
httpAgent: agent,
|
||
httpsAgent: agent
|
||
})
|
||
.then(response => console.log(response.data))
|
||
.catch(error => console.error(error));
|
||
```
|
||
|
||
## 🔍 日志验证
|
||
|
||
启动时会输出认证状态:
|
||
|
||
```
|
||
proxy server listening on :7777 [随机轮换] [需认证 (用户: testuser)]
|
||
proxy server listening on :7776 [最低延迟] [需认证 (用户: testuser)]
|
||
```
|
||
|
||
无认证模式:
|
||
|
||
```
|
||
proxy server listening on :7777 [随机轮换] [无认证]
|
||
proxy server listening on :7776 [最低延迟] [无认证]
|
||
```
|
||
|
||
## 📝 注意事项
|
||
|
||
- 认证采用 **HTTP Basic Auth** 标准,兼容绝大多数客户端
|
||
- 密码存储为 **SHA256 哈希**,安全性高
|
||
- 认证失败不会删除代理或影响池子状态
|
||
- 两个端口(7776、7777)共享相同的认证配置
|
||
- 认证仅保护代理服务,WebUI 有独立的登录系统
|