"docs(readme): 全面更新README文档,完善项目描述和配置说明"

This commit is contained in:
程广 2025-06-24 16:57:56 +08:00
parent dc5528c558
commit b58e51e4f5
1 changed files with 171 additions and 155 deletions

326
README.md
View File

@ -1,49 +1,65 @@
# gohttp # GoHTTP Server
## 项目概述 一个基于Go语言开发的高性能HTTP服务器支持多域名、SSL/TLS、静态文件服务等特性。类似Nginx功能的轻量级HTTP服务器实现提供静态文件服务、反向代理、路径重写、TLS支持等功能。
### 项目背景和价值 ## 主要特性
- **背景**: 实现一个类似Nginx功能的HTTP服务器提供静态文件服务、反向代理、路径重写、TLS支持等功能。 - 多服务器配置支持
- **价值**: 提供轻量级、高性能的HTTP服务解决方案适用于中小型应用或特定场景下的负载均衡和反向代理需求。 - SSL/TLS 支持
- 静态文件服务
## 目标
实现一个类似nginx功能的http服务器
## 核心功能
- 支持静态文件服务
- 反向代理Proxy - 反向代理Proxy
- 路径重写Rewrite - 路径重写Rewrite
- TLS加密支持
- 端口复用
- 健康检查 - 健康检查
- 访问控制IP白名单/黑名单)
- JWT认证
- 访问统计
- 管理接口
- 配置热重载
- 端口复用
- 日志管理支持Console和File两种Appender - 日志管理支持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 ```json
{ {
"logging" :{ "logging": {
"appenders": { "appenders": {
"out" :{ "out": {
"type": "file", "type": "file",
"options":{ "options": {
"file": "gohttpd.log" "file": "gohttpd.log"
} }
} }
}, },
"categories": { "categories": {
"default": { "default": {
"appenders": [ "out" ], "appenders": ["out"],
"level": "debug" "level": "debug"
} }
} }
}, },
"admin" : { "admin": {
"name": "admin", "name": "admin",
"port" : 8088, "port": 8088,
"username": "admin", "username": "admin",
"password": "admin", "password": "admin",
"directives":[ "directives": [
"Set-Header Access-Control-Allow-Origin *" "Set-Header Access-Control-Allow-Origin *"
], ],
"paths": [ "paths": [
@ -54,125 +70,136 @@
} }
] ]
}, },
"servers":[{ "servers": [{
"port" : 8080, "port": 8080,
"name":"test", "name": "test",
"paths":[ "paths": [
{ {
"path": "/", "path": "/",
"root": "/home/kingecg/code/gohttp/public/", "root": "/path/to/public/",
"default": "index.html" "default": "index.html"
}, },
{ {
"path": "/ws", "path": "/ws",
"upstreams":["http://localhost:3000"], "upstreams": ["http://localhost:3000"],
"directives":[ "directives": [
"HostSchemas $target", "HostSchemas $target",
"HeaderOrigin", "HeaderOrigin",
"Path /ws /", "Path /ws /",
"RemoveCookie token" "RemoveCookie token"
] ],
"health_check": {
"interval": "10s",
"timeout": "5s",
"retries": 3
}
} }
] ]
}]
}
```
- logging 日志配置
- admin 管理后台配置
- servers 服务器配置
日志采用自己实现的类log4j库目前只支持console 和file两种appeder
servers 配置
- port 端口
- name 服务器名称
- paths 路径配置
- certfile 证书文件
- keyfile 证书密钥文件
- directives 指令 针对response的指令目前只实现了set-header
paths 配置
- path 路径
- root 根目录
- default 默认文件
- upstreams 代理地址
- directives 这里指令针对的是代理请求,有以下几种:
- HostSchemas [$target] 代理地址
- HeaderOrigin 代理请求时添加Origin头
- Path [/ws] [/] 代理请求时重写URL路径用第二个参数替换url中的第一个部分
- RemoveCookie [token] 代理请求时删除cookie中的某些字段
### 健康检查配置(新)
健康检查功能允许系统定期检查上游服务器的健康状态,并在请求时自动跳过不健康的服务器。
#### 配置选项
- `health_check` - 在server配置中的健康检查参数
- `interval` - 检查间隔时间(如"10s"
- `timeout` - 单次检查超时时间(如"5s"
- `retries` - 健康检查失败重试次数
#### 示例配置
```json
{
"servers":[{
"port" : 8080,
"name":"test",
"paths":[{
"path": "/",
"root": "/home/kingecg/code/gohttp/public/",
"default": "index.html"
},{
"path": "/ws",
"upstreams":["http://localhost:3000"],
"directives":[
"HostSchemas $target",
"HeaderOrigin",
"Path /ws /",
"RemoveCookie token"
],
"health_check": {
"interval": "10s", // 每10秒检查一次
"timeout": "5s", // 每次检查5秒超时
"retries": 3 // 失败3次才认为是不健康
},
}]
}] }]
} }
``` ```
#### 特性 ## 配置说明
- 自动检测上游服务器的健康状态 ### 主配置文件
- 请求失败时自动重试其他可用服务器 - `logging`: 日志配置
- 定期后台检查服务器状态 - `appenders`: 日志输出配置支持console和file
- 详细的日志记录便于监控和调试 - `categories`: 日志类别配置
- `admin`: 管理后台配置
- `port`: 管理接口端口
- `username`: 管理员用户名
- `password`: 管理员密码
- `directives`: 管理接口指令
- `servers`: 服务器配置列表
### 指令系统 ### 服务器配置
- `name`: 服务名称
- `port`: 监听端口
- `certfile`: SSL证书文件路径
- `keyfile`: SSL密钥文件路径
- `paths`: 路径配置列表
- `directives`: 全局指令
指令系统采用了nginx的指令系统指令的格式为 ### 路径配置
- `path`: URL路径
- `root`: 本地文件系统路径
- `default`: 默认文件
- `upstreams`: 代理服务器地址列表
- `directives`: 路径特定指令
- `health_check`: 健康检查配置
- `interval`: 检查间隔时间
- `timeout`: 检查超时时间
- `retries`: 失败重试次数
## 指令系统
指令系统采用类似Nginx的指令系统格式为
``` ```
指令名 参数1 参数2 ... 参数n 指令名 参数1 参数2 ... 参数n
``` ```
指令系统用来对特定的request/response进行处理。目前只支持
- 返回的response中设置header ### 支持的指令
- 反向代理时,修改发送到上游服务器的请求 - `Set-Header`: 设置响应头
- `HostSchemas`: 设置代理目标地址
- `HeaderOrigin`: 添加Origin头
- `Path`: 重写URL路径
- `RemoveCookie`: 删除指定Cookie
命名规则: ## 管理接口
模块支持的指令以模块名作为前缀Proxy_Path 是反向代理模块的Path指令。 - `/admin/reload`: 重新加载配置
没有前缀的是全局指令Set-Header 是设置header的指令。 - `/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注册、路由解析、中间件管理 - Server: Restful API注册、路由解析、中间件管理
@ -180,50 +207,39 @@ paths 配置
- HealthCheck: 上游服务器健康检测 - HealthCheck: 上游服务器健康检测
- Admin: 管理后台API - Admin: 管理后台API
### 技术选型 ### 依赖库
- **编程语言**: Go (v1.23.0+) - `git.pyer.club/kingecg/cmux`: 多路复用支持
- **依赖库**: - `git.pyer.club/kingecg/godaemon`: 守护进程支持
- `git.pyer.club/kingecg/cmux`: 多路复用支持 - `git.pyer.club/kingecg/gologger`: 自定义日志库
- `git.pyer.club/kingecg/godaemon`: 守护进程支持 - `github.com/golang-jwt/jwt/v5`: JWT支持
- `git.pyer.club/kingecg/gologger`: 自定义日志库 - `github.com/nanmu42/gzip`: Gzip压缩支持
- `github.com/golang-jwt/jwt/v5`: JWT支持 - `github.com/samber/lo`: 工具库
- `github.com/nanmu42/gzip`: Gzip压缩支持
- `github.com/samber/lo`: 工具库
## 安装指南 ## 许可证
本项目采用 MIT 许可证。查看 [LICENSE](LICENSE) 文件了解更多详细信息。
### 开发环境搭建
1. 安装Go语言环境版本>=1.23.0
2. 克隆项目代码到本地:
```bash
git clone <repository-url>
cd /persistent/home/kingecg/work/code/gohttp
```
3. 安装依赖:
```bash
go mod tidy
```
### 构建与运行
- **构建命令**:
```bash
make clean && make build
```
- **运行命令**:
```bash
./target/<platform>/gohttpd
```
- **部署**: 使用`install.sh`脚本完成安装
## 构建
```bash
make clean && make build
``` ```
在target目录下生成可执行文件 MIT License
## 运行 Copyright (c) [year] [copyright holders]
```bash Permission is hereby granted, free of charge, to any person obtaining a copy
./gohttpd 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] 信息。