# 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", "health_check": { "interval": "10s", // 每10秒检查一次 "timeout": "5s", // 每次检查5秒超时 "retries": 3 // 失败3次才认为是不健康 }, "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" ] }] }] } ``` #### 特性 - 自动检测上游服务器的健康状态 - 请求失败时自动重试其他可用服务器 - 定期后台检查服务器状态 - 详细的日志记录便于监控和调试 ### 指令系统 指令系统采用了nginx的指令系统,指令的格式为: ``` 指令名 参数1 参数2 ... 参数n ``` 指令系统用来对特定的request/response进行处理。目前只支持: - 返回的response中设置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 ```