124 lines
2.7 KiB
Markdown
124 lines
2.7 KiB
Markdown
# 自定义DNS反向代理示例
|
||
|
||
这个示例展示了如何使用 goproxy 创建一个支持自定义 DNS 解析和负载均衡的反向代理服务器。
|
||
|
||
## 功能特点
|
||
|
||
- 支持自定义 DNS 解析规则
|
||
- 支持多后端服务器负载均衡
|
||
- 支持通配符域名解析
|
||
- 支持 DNS 缓存
|
||
- 支持优雅关闭
|
||
- 支持配置文件
|
||
|
||
## 使用方法
|
||
|
||
1. 编译示例:
|
||
|
||
```bash
|
||
go build -o custom_dns_proxy main.go
|
||
```
|
||
|
||
2. 运行示例:
|
||
|
||
```bash
|
||
# 使用默认配置
|
||
./custom_dns_proxy
|
||
|
||
# 指定配置文件
|
||
./custom_dns_proxy -config config.json
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### 命令行参数
|
||
|
||
- `-addr`: 监听地址,默认为 ":8080"
|
||
- `-config`: 配置文件路径,默认为 "config.json"
|
||
|
||
### 配置文件
|
||
|
||
配置文件支持 JSON 格式,包含以下主要配置项:
|
||
|
||
```json
|
||
{
|
||
"dns": {
|
||
"records": {
|
||
"api.example.com": [
|
||
"192.168.1.1:8080",
|
||
"192.168.1.2:8080",
|
||
"192.168.1.3:8080"
|
||
],
|
||
"*.example.com": [
|
||
"192.168.1.1:8080",
|
||
"192.168.1.2:8080"
|
||
]
|
||
},
|
||
"fallback": true,
|
||
"ttl": 300,
|
||
"strategy": "round-robin"
|
||
},
|
||
"proxy": {
|
||
"listen_addr": ":8080",
|
||
"enable_https": false,
|
||
"enable_websocket": true,
|
||
"enable_compression": true,
|
||
"enable_cors": true,
|
||
"preserve_client_ip": true,
|
||
"add_x_forwarded_for": true,
|
||
"add_x_real_ip": true,
|
||
"insecure_skip_verify": false,
|
||
"enable_health_check": false,
|
||
"health_check_interval": 30,
|
||
"health_check_timeout": 5,
|
||
"enable_retry": true,
|
||
"max_retries": 3,
|
||
"retry_backoff": 1,
|
||
"max_retry_backoff": 10,
|
||
"enable_metrics": true,
|
||
"enable_tracing": false,
|
||
"websocket_intercept": false,
|
||
"dns_cache_ttl": 300,
|
||
"enable_cache": true,
|
||
"cache_ttl": 300,
|
||
"enable_connection_pool": true,
|
||
"connection_pool_size": 100,
|
||
"idle_timeout": 60,
|
||
"request_timeout": 30
|
||
}
|
||
}
|
||
```
|
||
|
||
## 负载均衡策略
|
||
|
||
当前示例使用轮询(Round Robin)负载均衡策略,支持以下特性:
|
||
|
||
1. 多后端服务器轮询
|
||
2. 自动故障转移
|
||
3. 健康检查
|
||
4. 连接池管理
|
||
|
||
## 示例用法
|
||
|
||
1. 启动代理服务器:
|
||
|
||
```bash
|
||
./custom_dns_proxy -addr :8080
|
||
```
|
||
|
||
2. 使用 curl 测试:
|
||
|
||
```bash
|
||
# 测试 API 访问
|
||
curl http://api.example.com:8080/api/v1/users
|
||
|
||
# 测试通配符域名
|
||
curl http://test.example.com:8080/api/v1/users
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 确保配置文件中的 DNS 记录正确配置
|
||
2. 确保后端服务器正常运行
|
||
3. 建议在生产环境中启用 HTTPS
|
||
4. 根据实际需求调整连接池大小和超时设置 |