gin是一个使用Go语言开发的Web框架,具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,支持中间件等。

在工作中有时候需要支持https服务,gin可以通过中间件的方式来提供对https的支持,这里使用的是secure来提供https服务支持。这里给出一个简单的使用示例:

示例代码

package main

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"github.com/unrolled/secure"
)

func init() {
	viper.SetConfigFile("./config/config.yaml")
	if err := viper.ReadInConfig(); err != nil {
		panic(err.Error())
	}
}

func main() {
	engine := gin.Default()

	engine.GET("/test", func(ctx *gin.Context) {
		ctx.String(http.StatusOK, "this is a https test")
	})

	if viper.GetBool("tls.enable") {
		engine.Use(tlsHandler(viper.GetString("port")))
		engine.RunTLS(":"+viper.GetString("port"), viper.GetString("tls.cert"), viper.GetString("tls.key"))
	} else {
		engine.Run(":" + viper.GetString("port"))
	}
}

func tlsHandler(port string) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		tlsMiddleward := secure.New(secure.Options{
			SSLRedirect: true,
			SSLHost:     ":" + port,
		})
		if err := tlsMiddleward.Process(ctx.Writer, ctx.Request); err != nil {
			fmt.Printf("tlsHandler error: %s",err.Error())
			return
		}
		ctx.Next()
	}
}

结果示例

http服务

配置:

version: '3.3'

port: 18080

tls:
  enable: false 
  cert: ./config/server.pem
  key: ./config/server.key

http服务

https服务

version: '3.3'

port: 18080

tls:
  enable: true 
  cert: ./config/server.pem
  key: ./config/server.key

https服务

这里的不安全使用使用的证书是一个测试证书


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin92
Github: mengbin92
cnblogs: 恋水无意