diff --git a/README.md b/README.md index aee5efd..8bd6061 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ - 静态文件服务 - 反向代理(Proxy) - 路径重写(Rewrite) +- TCP代理服务器 - 健康检查 - 访问控制(IP白名单/黑名单) - JWT认证 @@ -34,6 +35,7 @@ make build ### 配置 1. 主配置文件 (config.json) 2. 域名配置文件 (include/*.json) +3. TCP代理配置文件 (include/tcp_*.json) ### 配置示例 ```json @@ -131,6 +133,42 @@ make build - `timeout`: 检查超时时间 - `retries`: 失败重试次数 +### TCP代理配置 +TCP代理支持在指定端口监听TCP请求并转发到指定目标服务器。 + +#### 在主配置文件中配置 +```json +{ + "tcp_proxys": [ + { + "name": "mysql-proxy", + "listen": "0.0.0.0:3307", + "target": "192.168.1.100:3306", + "enabled": true + } + ] +} +``` + +#### 在include目录中配置 +TCP代理配置也可以从include目录加载,使用 `tcp_*.json` 文件命名约定: + +**include/tcp_mysql.json:** +```json +{ + "name": "mysql-proxy", + "listen": "0.0.0.0:3307", + "target": "192.168.1.100:3306", + "enabled": true +} +``` + +**TCP代理配置项:** +- `name`: 代理名称(唯一标识) +- `listen`: 监听地址,格式如 `0.0.0.0:3307` +- `target`: 目标服务器地址,格式如 `192.168.1.100:3306` +- `enabled`: 是否启用 + ## 指令系统 指令系统采用类似Nginx的指令系统,格式为: diff --git a/changes.md b/changes.md index 9f29724..e3e0c87 100644 --- a/changes.md +++ b/changes.md @@ -179,7 +179,31 @@ type TcpProxyConfig struct { } ``` -### 6.5 服务器管理 (server/manager.go) +### 6.5 从include目录加载TCP代理配置 + +TCP代理配置也可以从include目录中加载,使用 `tcp_*.json` 文件命名约定: + +**include目录结构:** +``` +./include/ +├── servers/ +│ ├── web.json +│ └── api.json +├── tcp_mysql.json # TCP代理配置 +└── tcp_redis.json # TCP代理配置 +``` + +**include/tcp_mysql.json 示例:** +```json +{ + "name": "mysql-proxy", + "listen": "0.0.0.0:3307", + "target": "192.168.1.100:3306", + "enabled": true +} +``` + +### 6.6 服务器管理 (server/manager.go) 新增TCP代理服务器管理功能: - `TcpProxyManager`:TCP代理处理器映射 diff --git a/gohttp.go b/gohttp.go index 3211e74..5ab387a 100644 --- a/gohttp.go +++ b/gohttp.go @@ -148,6 +148,26 @@ func LoadConfig() { } } } + + // 加载TCP代理配置 from include directory (tcp_*.json files) + tcpConfigs, err := filepath.Glob(model.Config.IncludDir + "/tcp_*.json") + if err == nil { + for _, config := range tcpConfigs { + content, err := os.ReadFile(config) + if err == nil { + decoder := json.NewDecoder(strings.NewReader(string(content))) + for decoder.More() { + tcpProxy := model.TcpProxyConfig{} + err = decoder.Decode(&tcpProxy) + if err == nil { + model.Config.TcpProxys = append(model.Config.TcpProxys, &tcpProxy) + } else { + break + } + } + } + } + } } // 遍历配置中的所有服务器,规范化每个服务器配置中的路径