Iris框架入门系列2-Iris服务监听和配置
Iris服务监听
Iris 提供了丰富的服务监听方法。
- 普通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"))
}
- 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))
}
- 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"))
}
- 自动使用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提供了一些应用程序的基础配置项,他们可以用过程序中动态设置,也可以使用 toml
和 yaml
格式的配置文件进行加载,目前的配置参见下表
| 配置项 | 数据类型 | 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 |
使用配置文件的方式有下面几种:
- 配置文件方式
可以将配置项写成YAML
和TOML
格式的文件直接读取使用
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.WithXXX
和 iris.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",
}))