Iris框架入门系列2-Iris服务监听和配置

Iris服务监听

Iris 提供了丰富的服务监听方法。

  1. 普通Http方式, 按照ip:port的格式,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<h1>Hello World!</h1>")
})
//http://localhost:8080
app.Run(iris.Addr(":8080"))
}
  1. Socket监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/core/netutil"
)
func main() {
app := iris.New()
listener, err := netutil.UNIX("/tmp/server.sock", 0666)
if err != nil {
panic(err)
}
app.Run(iris.Listener(listener))
}
  1. Https监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.Writef("Hello from the SECURE server")
})
// start the server (HTTPS) on port 443
app.Run(iris.TLS("127.0.0.1:443", "mycert.cert", "mykey.key"))
}

同时,还可以将http重定向到https

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main
import (
"net/url"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/core/host"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.Writef("Hello from the SECURE server")
})
app.Get("/mypath", func(ctx context.Context) {
ctx.Writef("Hello from the SECURE server on path /mypath")
})
//创建http服务,并将其转到https
target, _ := url.Parse("https://127.0.1:443")
go host.NewProxy("127.0.0.1:80", target).ListenAndServe()
//创建https服务
app.Run(iris.TLS("127.0.0.1:443", "mycert.cert", "mykey.key"))
}
  1. 自动使用Let’sEncrypt证书创建https服务

Iris提供了一键使用Letsencrypt的免费证书,免除倒腾证书和配置Nginx的苦恼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.Writef("Hello from SECURE SERVER!")
})
//以下不可以应用在本地服务器,必须应用在真实的服务器上。
//因为此功能使用了 `golang.org/x/crypto/acme/autocert` 来实现
app.Run(iris.AutoTLS("localhost:443"))
}

Iris服务配置

Iris提供了一些应用程序的基础配置项,他们可以用过程序中动态设置,也可以使用 tomlyaml 格式的配置文件进行加载,目前的配置参见下表

配置项 数据类型 Toml键名 Yaml键名
IgnoreServerErrors []string IgnoreServerErrors IgnoreServerErrors
DisableStartupLog bool DisableStartupLog DisableStartupLog
DisableInterruptHandler bool DisableInterruptHandler DisableInterruptHandler
DisablePathCorrection bool DisablePathCorrection DisablePathCorrection
EnablePathEscape bool EnablePathEscape EnablePathEscape
EnableOptimizations bool EnableOptimizations EnableOptimizations
FireMethodNotAllowed bool FireMethodNotAllowed FireMethodNotAllowed
DisableBodyConsumptionOnUnmarshal bool DisableBodyConsumptionOnUnmarshal DisableBodyConsumptionOnUnmarshal
DisableAutoFireStatusCode bool DisableAutoFireStatusCode DisableAutoFireStatusCode
TimeFormat string TimeFormat TimeFormat
Charset string Charset Charset
TranslateFunctionContextKey string TranslateFunctionContextKey TranslateFunctionContextKey
TranslateLanguageContextKey string TranslateLanguageContextKey TranslateLanguageContextKey
ViewLayoutContextKey string ViewLayoutContextKey ViewLayoutContextKey
ViewDataContextKey string ViewDataContextKey ViewDataContextKey
RemoteAddrHeaders map[string]bool RemoteAddrHeaders RemoteAddrHeaders
Other map[string]interface{} Other Other

使用配置文件的方式有下面几种:

  • 配置文件方式

可以将配置项写成YAMLTOML格式的文件直接读取使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<b>Hello!</b>")
})
//yaml
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.YAML("./configs/iris.yml")))
//toml
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.TOML("./configs/iris.yml")))
}
  • 程序中使用相关函数动态设置

使用 iris.WithXXXiris.WithoutXXX 可以在Run方法中多个追加进行配置设置。

也可以使用单独使用在Configure方法中,但是Configure方法必须在Run之前使用,否则无效。

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<b>Hello!</b>")
})
app.Run(iris.Addr(":8080"), iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
//或者
//app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
//app.Run(iris.Addr(":8080"))
}
  • 直接创建配置结构体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<b>Hello!</b>")
})
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{ // default configuration:
DisableStartupLog: false,
DisableInterruptHandler: false,
DisablePathCorrection: false,
EnablePathEscape: false,
FireMethodNotAllowed: false,
DisableBodyConsumptionOnUnmarshal: false,
DisableAutoFireStatusCode: false,
TimeFormat: "Mon, 02 Jan 2006 15:04:05 GMT",
Charset: "UTF-8",
}))
本文使用「CC BY 4.0」创作共享协议,只要在使用时署名,您可以对本文进行转载、节选、混编、二次创作,并允许商业性使用。
本文为作者原创,如果您认为本文对您有帮助,欢迎打赏作者