gohttp/README.md

148 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2023-12-06 20:58:08 +08:00
# gohttp
2023-12-07 00:22:53 +08:00
## 目标
实现一个类似nginx功能的http服务器
## 功能
- 支持静态文件
- Proxy
- 支持rewrite
2023-12-13 17:59:14 +08:00
- 支持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",
2023-12-15 22:40:12 +08:00
"directives":[
"Set-Header Access-Control-Allow-Origin *"
],
2023-12-13 17:59:14 +08:00
"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"],
2023-12-15 22:40:12 +08:00
"directives":[
"HostSchemas $target",
"HeaderOrigin",
"Path /ws /",
"RemoveCookie token"
]
2023-12-13 17:59:14 +08:00
}
]
}]
}
```
- logging 日志配置
- admin 管理后台配置
- servers 服务器配置
日志采用自己实现的类log4j库目前只支持console 和file两种appeder
servers 配置
- port 端口
- name 服务器名称
- paths 路径配置
- certfile 证书文件
- keyfile 证书密钥文件
2023-12-15 22:40:12 +08:00
- directives 指令 针对response的指令目前只实现了set-header
2023-12-13 17:59:14 +08:00
paths 配置
- path 路径
- root 根目录
- default 默认文件
- upstreams 代理地址
2023-12-15 22:40:12 +08:00
- directives 这里指令针对的是代理请求,有以下几种:
- HostSchemas [$target] 代理地址
- HeaderOrigin 代理请求时添加Origin头
- Path [/ws] [/] 代理请求时重写URL路径用第二个参数替换url中的第一个部分
- RemoveCookie [token] 代理请求时删除cookie中的某些字段
### 指令系统
2023-12-13 17:59:14 +08:00
2023-12-15 22:40:12 +08:00
指令系统采用了nginx的指令系统指令的格式为
```
指令名 参数1 参数2 ... 参数n
```
指令系统用来对特定的request/response进行处理。目前只支持
2023-12-13 17:59:14 +08:00
2023-12-15 22:40:12 +08:00
- 返回的response中设置header
- 反向代理时,修改发送到上游服务器的请求
2023-12-07 22:42:27 +08:00
## Packages
### Server
2023-12-13 17:59:14 +08:00
RestMux 提供
- Restful API注册功能的 ServerMux
- Route
- Url路径参数解析(形如:/user/:id)
- 中间件
- server管理
### model
提供模型定义
### admin
管理后台api
### handler
目录 hander
提供文件和代理两种handler
其中proxy handler 提供简单的负载均衡和会话粘滞功能
## 构建
```bash
make clean && make build
```
在target目录下生成可执行文件
## 运行
2023-12-07 22:42:27 +08:00
2023-12-13 17:59:14 +08:00
```bash
./gohttpd
```