gohttp/README.md

245 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GoHTTP Server
一个基于Go语言开发的高性能HTTP服务器支持多域名、SSL/TLS、静态文件服务等特性。类似Nginx功能的轻量级HTTP服务器实现提供静态文件服务、反向代理、路径重写、TLS支持等功能。
## 主要特性
- 多服务器配置支持
- SSL/TLS 支持
- 静态文件服务
- 反向代理Proxy
- 路径重写Rewrite
- 健康检查
- 访问控制IP白名单/黑名单)
- JWT认证
- 访问统计
- 管理接口
- 配置热重载
- 端口复用
- 日志管理支持Console和File两种Appender
- Gzip压缩支持
## 快速开始
### 系统要求
- Go 1.23.0+
### 安装
```bash
git clone [repository-url]
cd gohttp
go mod tidy
make build
```
### 配置
1. 主配置文件 (config.json)
2. 域名配置文件 (include/*.json)
### 配置示例
```json
{
"logging": {
"appenders": {
"out": {
"type": "file",
"options": {
"file": "gohttpd.log"
}
}
},
"categories": {
"default": {
"appenders": ["out"],
"level": "debug"
}
}
},
"admin": {
"name": "admin",
"port": 8088,
"username": "admin",
"password": "admin",
"directives": [
"Set-Header Access-Control-Allow-Origin *"
],
"paths": [
{
"path": "/",
"root": "./adminui",
"default": "index.html"
}
]
},
"servers": [{
"port": 8080,
"name": "test",
"paths": [
{
"path": "/",
"root": "/path/to/public/",
"default": "index.html"
},
{
"path": "/ws",
"upstreams": ["http://localhost:3000"],
"directives": [
"HostSchemas $target",
"HeaderOrigin",
"Path /ws /",
"RemoveCookie token"
],
"health_check": {
"interval": "10s",
"timeout": "5s",
"retries": 3
}
}
]
}]
}
```
## 配置说明
### 主配置文件
- `logging`: 日志配置
- `appenders`: 日志输出配置支持console和file
- `categories`: 日志类别配置
- `admin`: 管理后台配置
- `port`: 管理接口端口
- `username`: 管理员用户名
- `password`: 管理员密码
- `directives`: 管理接口指令
- `servers`: 服务器配置列表
### 服务器配置
- `name`: 服务名称
- `port`: 监听端口
- `certfile`: SSL证书文件路径
- `keyfile`: SSL密钥文件路径
- `paths`: 路径配置列表
- `directives`: 全局指令
### 路径配置
- `path`: URL路径
- `root`: 本地文件系统路径
- `default`: 默认文件
- `upstreams`: 代理服务器地址列表
- `directives`: 路径特定指令
- `health_check`: 健康检查配置
- `interval`: 检查间隔时间
- `timeout`: 检查超时时间
- `retries`: 失败重试次数
## 指令系统
指令系统采用类似Nginx的指令系统格式为
```
指令名 参数1 参数2 ... 参数n
```
### 支持的指令
- `Set-Header`: 设置响应头
- `HostSchemas`: 设置代理目标地址
- `HeaderOrigin`: 添加Origin头
- `Path`: 重写URL路径
- `RemoveCookie`: 删除指定Cookie
## 管理接口
- `/admin/reload`: 重新加载配置
- `/admin/stats`: 查看统计信息
- `/admin/health`: 健康检查
## 构建和部署
### 构建
```bash
make clean && make build
```
构建后的可执行文件位于target目录。
### 运行
```bash
./target/<platform>/gohttpd
```
### 系统服务安装
安装脚本会执行以下操作:
1. 检查是否已安装gohttpd
2. 创建目录 `/usr/local/gohttpd`
3. 复制所有必要文件到安装目录
4. 创建软链接到 `/usr/local/bin/gohttpd`
5. 安装并启用系统服务
安装命令:
```bash
sudo ./install.sh
```
安装完成后,可以通过以下命令管理服务:
```bash
# 启动服务
sudo systemctl start gohttpd.service
# 停止服务
sudo systemctl stop gohttpd.service
# 重启服务
sudo systemctl restart gohttpd.service
# 查看服务状态
sudo systemctl status gohttpd.service
# 查看服务日志
sudo journalctl -u gohttpd.service
```
默认安装路径:
- 程序安装目录:`/usr/local/gohttpd/`
- 可执行文件链接:`/usr/local/bin/gohttpd`
- 服务配置文件:`/etc/systemd/system/gohttpd.service`
## 技术架构
- **架构模式**: 单体架构,模块化设计
- **关键组件**:
- Server: Restful API注册、路由解析、中间件管理
- Handler: 文件和代理处理器
- HealthCheck: 上游服务器健康检测
- Admin: 管理后台API
### 依赖库
- `git.kingecg.top/kingecg/cmux`: 多路复用支持
- `git.kingecg.top/kingecg/godaemon`: 守护进程支持
- `git.kingecg.top/kingecg/gologger`: 自定义日志库
- `github.com/golang-jwt/jwt/v5`: JWT支持
- `github.com/nanmu42/gzip`: Gzip压缩支持
- `github.com/samber/lo`: 工具库
## 许可证
本项目采用 MIT 许可证。查看 [LICENSE](LICENSE) 文件了解更多详细信息。
```
MIT License
Copyright (c) [year] [copyright holders]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
注意:请确保更新 LICENSE 文件中的 [year] 和 [copyright holders] 信息。