跳转至正文

HTTP Server ​

简介 ​

PrismGo 的 HTTP 服务由 go run . serve 启动。应用启动时会执行 bootstrap.NewApplication(),加载 provider、路由、中间件和异常处理器,然后构造 net/http.Server。

新项目在 bootstrap/app.go 中注册路由:

go
foundation.Configure(basePath...).
    WithRouting(func(r *foundation.Routing) {
        r.Routes(apphttp.RegisterRoutes)
    }).
    Create()

启动服务 ​

bash
go run . serve

指定端口:

bash
go run . serve --port=8000

--port 只覆盖本次命令使用的端口;不会修改 .env 或 config/app.go。

监听地址 ​

默认配置位于 config/app.go 的 app.server:

go
"server": map[string]interface{}{
    "host": Env("SERVER_HOST", ""),
    "port": Env("SERVER_PORT", 8080),
}

对应 .env:

dotenv
SERVER_HOST=127.0.0.1
SERVER_PORT=8080
配置路径环境变量默认值说明
app.server.hostSERVER_HOST""监听主机。空字符串表示由 Go 使用所有地址
app.server.portSERVER_PORT8080监听端口

超时与请求限制 ​

配置路径环境变量默认值说明
app.server.timeoutSERVER_TIMEOUT15兼容型请求超时,作为部分超时配置的 fallback
app.server.read_timeoutSERVER_READ_TIMEOUT15s读取完整请求的超时
app.server.read_header_timeoutSERVER_READ_HEADER_TIMEOUT5s读取请求头的超时
app.server.write_timeoutSERVER_WRITE_TIMEOUT30s写响应超时
app.server.idle_timeoutSERVER_IDLE_TIMEOUT60skeep-alive 空闲超时
app.server.shutdown_timeoutSERVER_SHUTDOWN_TIMEOUT15s优雅关闭等待时间
app.server.max_header_bytesSERVER_MAX_HEADER_BYTES1048576最大请求头字节数
app.server.max_multipart_memorySERVER_MAX_MULTIPART_MEMORY33554432multipart 表单内存上限

持续时间字段支持 Go duration 字符串,例如 15s、1m、1m30s。也支持纯数字秒数。

代理与客户端 IP ​

配置路径环境变量默认值说明
app.server.trusted_proxiesSERVER_TRUSTED_PROXIES""逗号分隔的可信代理列表
app.server.client_ip_headersSERVER_CLIENT_IP_HEADERSX-Forwarded-For,X-Real-IP用于解析客户端 IP 的请求头

生产环境位于反向代理之后时,应显式设置可信代理,避免业务逻辑信任伪造的客户端 IP。

中间件开关 ​

配置路径环境变量默认值说明
app.server.access_logSERVER_ACCESS_LOGtrue是否启用 Gin 访问日志
app.server.exception_handlerSERVER_EXCEPTION_HANDLERtrue是否挂载统一 HTTP 异常处理中间件

app.debug / APP_DEBUG 会影响异常响应是否暴露内部细节。生产环境必须设置为 false。

进程控制 ​

serve 会按端口维护 PID 文件。控制命令会读取当前端口对应的 PID:

命令行为
go run . serve --stop优雅停止当前端口服务
go run . serve --kill强制停止当前端口服务
go run . serve --reload启动新进程并通知旧进程优雅退出
go run . serve --restart杀掉旧进程后启动新进程

如果服务不是通过 serve 启动,或 PID 文件已不存在,控制命令会报告无法读取 PID 文件。