- Created by 郭强, last modified on Sep 25, 2023
Server
对象支持通过配置文件进行便捷的配置。支持的配置选项以及配置说明请查看接口文档说明,文档中有详细说明,以下章节不会对配置选项作介绍。
当使用g.Server(单例名称)
获取Server
单例对象时,将会自动通过默认的配置管理对象获取对应的Server
配置。默认情况下会读取server.单例名称
配置项,当该配置项不存在时,将会读取server
配置项。
支持的配置文件配置项请参考Server
配置管理对象属性:https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#ServerConfig
示例1,默认配置项
server: address: ":80" serverRoot: "/var/www/Server"
随后可以使用g.Server()
获取默认的单例对象时自动获取并设置该配置。
在没有配置address
的情况下,http server
将会使用本地网卡的所有ip
地址加上随机空闲端口来启动(默认配置:0
)。如果想要指定ip
但是使用随机空闲端口启动http server
,可以使用ip:0
的格式来配置address
,例如:192.168.1.1:0, 10.0.1.1:0
。
示例2,多个配置项
多个Server
的配置示例:
server: address: ":80" serverRoot: "/var/www/Server" server1: address: ":8080" serverRoot: "/var/www/Server1" server2: address: ":8088" serverRoot: "/var/www/Server2"
我们可以通过单例对象名称获取对应配置的Server
单例对象:
// 对应 server.server1 配置项 s1 := g.Server("server1") // 对应 server.server2 配置项 s2 := g.Server("server2") // 对应默认配置项 server s3 := g.Server("none") // 对应默认配置项 server s4 := g.Server()
示例3,较完整示例
比如上一个章节的示例,对应的配置文件如下:
server: address: ":8199" serverRoot: "/var/www/Server" indexFiles: ["index.html", "main.html"] accessLogEnabled: true errorLogEnabled: true pprofEnabled: true logPath: "/var/log/ServerLog" sessionIdName: "MySessionId" sessionPath: "/tmp/MySessionStoragePath" sessionMaxAge: "24h" dumpRouterMap: false
同理,配置属性项的名称也不区分大小写,单词间也支持使用-
/_
符号连接。也就是说以下配置文件效果和上面的配置文件一致:
server: address: ":8199" serverRoot: "/var/www/Server" indexFiles: ["index.html", "main.html"] accessLogEnabled: true errorLogEnabled: true pprofEnabled: true log-path: "/var/log/ServerLog" session_Id_Name: "MySessionId" Session-path: "/tmp/MySessionStoragePath" session_MaxAge: "24h" DumpRouterMap: false
我们推荐配置文件中的配置项名称统一使用小驼峰的格式。
上传限制
Server
对于客户端提交的数据是由大小限制的,主要有两个配置参数控制:
MaxHeaderBytes
:请求头大小限制,请求头包括客户端提交的Cookie
数据,默认设置为10KB
。ClientMaxBodySize
:客户端提交的Body
大小限制,同时也影响文件上传大小,默认设置为8MB
。
由于安全性的考虑,默认的上传限制都不是很高,特别是ClientMaxBodySize
的大小限制,在需要文件上传的场景可适当考虑调整,通过配置文件配置即可,例如:
server: maxHeaderBytes: "20KB" clientMaxBodySize: "200MB"
这样便修改请求头大小限制为20KB
,文件上传大小限制为200MB
。如果不想做上传大小做任何限制,那么将clientMaxBodySize
设置为0
即可。
日志配置
从v2
版本开始,Server
增加了对配置文件中Logger
的配置项支持,主要是为了统一日志组件配置、并解决日志滚动切分的问题。配置示例:
server: address: ":8080" logger: path: "/var/log/server" file: "{Y-m-d}.log" stdout: false rotateSize: "100M" rotateBackupLimit: 10 rotateBackupExpire: "60d" rotateBackupCompress: 9 rotateCheckInterval: "24h"
关于其中logger
项的详细介绍请参考 日志组件-配置管理 章节。
- No labels
4 Comments
白夜
郭强 海亮 server的配置address,期望配置成
但是报错:
期望配置地址能够设置ip,该怎么做?
郭强
这是一个
BUG
,已修复,你目前可以使用master
分支试试。Jarvis
keepeye
提个建议:server配置支持指定network为tcp4。现在是写死的如下:
net.Listen("tcp", s.httpServer.Addr)
这会导致一个问题,比如监听
0.0.0.0:8000
的时候,在linux下ss -l | grep 8000
显示监听的是*:8000
。如果
net.Listen("tcp4", s.httpServer.Addr)
则ss查看监听在0.0.0.0:8000
不太了解具体的原理,但是如果是
*:8000
的话,windows无法通过 localhost:8000 访问 wsl2 中的server。当然了通过 s.SetListener 传一个自定义的也行,但不知道是否会损失一些功能。