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

July 27, 2017
Golang Iris

Iris服务监听

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

  1. 普通Http方式, 按照ip:port的格式,如:
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监听
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监听
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

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的苦恼。

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格式的文件直接读取使用

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之前使用,否则无效。

如:


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"))
}
  • 直接创建配置结构体

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",
	}))