配置对象

配置对象定义:

方法列表: https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#Server

简要说明:

  1. 可以通过SetConfigSetConfigWithMap来设置。
  2. 也可以使用Server对象的Set*/Enable*方法进行特定配置的设置。
  3. 主要注意的是,配置项在Server执行Start之后便不能再修改,防止产生并发安全问题。

SetConfigWithMap方法

我们可以使用SetConfigWithMap方法通过Key-Value键值对来设置/修改Server的特定配置,其余的配置使用默认配置即可。其中Key的名称即是ServerConfig这个struct中的属性名称,并且不区分大小写,单词间也支持使用-/_/空格符号连接,具体可参考 类型转换-Struct转换 章节。

简单示例:

其中ServerRoot的键名也可以使用serverRoot, server-root, server_root, server root,其他配置属性以此类推。

一个比较完整的示例:

  1. s := g.Server()
  2. s.SetConfigWithMap(g.Map{
  3. "address": ":80",
  4. "serverRoot": "/var/www/Server",
  5. "indexFiles": g.Slice{"index.html", "main.html"},
  6. "accessLogEnabled": true,
  7. "errorLogEnabled": true,
  8. "pprofEnabled": true,
  9. "logPath": "/var/log/ServerLog",
  10. "sessionPath": "/tmp/MySessionStoragePath",
  11. "dumpRouterMap": false,
  12. })
  13. s.Run()

配置文件

当使用g.Server(单例名称)获取Server单例对象时,将会自动通过默认的配置管理对象获取对应的Server配置。默认情况下会读取server.单例名称配置项,当该配置项不存在时,将会读取server配置项。

支持的配置文件配置项请参考Server配置管理对象属性:https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#ServerConfig

  1. [server]
  2. address = ":80"
  3. serverRoot = "/var/www/Server"

随后可以使用g.Server()获取默认的单例对象时自动获取并设置该配置。

示例2,多个配置项

多个Server的配置示例:

我们可以通过单例对象名称获取对应配置的Server单例对象:

  1. // 对应 server.server1 配置项
  2. s1 := g.Server("server1")
  3. // 对应 server.server2 配置项
  4. s2 := g.Server("server2")
  5. // 对应默认配置项 server
  6. s3 := g.Server("none")
  7. // 对应默认配置项 server
  8. s4 := g.Server()

比如上一个章节的示例,对应的配置文件如下:

  1. [server]
  2. address = ":8199"
  3. serverRoot = "/var/www/Server"
  4. indexFiles = ["index.html", "main.html"]
  5. accessLogEnabled = true
  6. pprofEnabled = true
  7. logPath = "/var/log/ServerLog"
  8. sessionIdName = "MySessionId"
  9. sessionPath = "/tmp/MySessionStoragePath"
  10. dumpRouterMap = false

同理,配置属性项的名称也不区分大小写,单词间也支持使用-/_符号连接。也就是说以下配置文件效果和上面的配置文件一致:

上传限制

Server对于客户端提交的数据是由大小限制的,主要有两个配置参数控制:

  • MaxHeaderBytes:请求头大小限制,请求头包括客户端提交的Cookie数据,默认设置为10KB
  • ClientMaxBodySize:客户端提交的Body大小限制,同时也影响文件上传大小,默认设置为8MB

由于安全性的考虑,默认的上传限制都不是很高,特别是ClientMaxBodySize的大小限制,在需要文件上传的场景可适当考虑调整,通过配置文件配置即可,例如:

  1. [server]
  2. maxHeaderBytes = "20KB"
  3. clientMaxBodySize = "200MB"

这样便修改请求头大小限制为20KB,文件上传大小限制为200MB。如果不想做上传大小做任何限制,那么将clientMaxBodySize设置为0即可。

v2版本开始,Server增加了对配置文件中Logger的配置项支持,主要是为了统一日志组件配置、并解决日志滚动切分的问题。配置示例:

  1. [server]
  2. address = ":8080"
  3. [server.logger]
  4. path = "/var/log/server"
  5. file = "{Y-m-d}.log"
  6. stdoutPrint = false
  7. rotateSize = "100M"
  8. rotateBackupLimit = 10
  9. rotateBackupExpire = "60d"
  10. rotateBackupCompress = 9

关于其中logger项的详细介绍请参考 章节。

配置示例

所有的配置项请参考ServerConfig对象属性:

以下为配置示例文件: