gohttp/README.md

202 lines
4.6 KiB
Markdown
Raw 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
## 目标
实现一个类似nginx功能的http服务器
## 功能
- 支持静态文件
- Proxy
- 支持rewrite
- 支持TLS
- 支持端口复用
- 支持健康检查
## 配置
```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": "/home/kingecg/code/gohttp/public/",
"default": "index.html"
},
{
"path": "/ws",
"upstreams":["http://localhost:3000"],
"directives":[
"HostSchemas $target",
"HeaderOrigin",
"Path /ws /",
"RemoveCookie token"
]
}
]
}]
}
```
- 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次才认为是不健康
},
}]
}]
}
```
#### 特性
- 自动检测上游服务器的健康状态
- 请求失败时自动重试其他可用服务器
- 定期后台检查服务器状态
- 详细的日志记录便于监控和调试
### 指令系统
指令系统采用了nginx的指令系统指令的格式为
```
指令名 参数1 参数2 ... 参数n
```
指令系统用来对特定的request/response进行处理。目前只支持
- 返回的response中设置header
- 反向代理时,修改发送到上游服务器的请求
命名规则:
模块支持的指令以模块名作为前缀Proxy_Path 是反向代理模块的Path指令。
没有前缀的是全局指令Set-Header 是设置header的指令。
## Packages
### Server
RestMux 提供
- Restful API注册功能的 ServerMux
- Route
- Url路径参数解析(形如:/user/:id)
- 中间件
- server管理
### model
提供模型定义
### admin
管理后台api
### handler
目录 handler
提供文件和代理两种handler
其中proxy handler 提供简单的负载均衡和会话粘滞功能
## 构建
```bash
make clean && make build
```
在target目录下生成可执行文件
## 运行
```bash
./gohttpd
```