go设置https访问

之前我们搭建过一个 ai服务器 : https://blog.csdn.net/daily886/article/details/96118130

现在在他基础上 修改为 https

需要用到的第三方包有:

go get github.com/unrolled/secure

修改文件 aichat/router/router.go ,router.go 内容如下:

package router

import (
	"log"
	"net/http"

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

	"aichat/service"
	"aichat/router/middleware"
)

//初始化路由
func InitRouter(g *gin.Engine){
	middlewares := []gin.HandlerFunc{}
	//中间件
	g.Use(gin.Recovery())
	g.Use(middleware.NoCache)
	g.Use(middleware.Options)
	g.Use(middleware.Secure)
	g.Use(middlewares...)

	rou := gin.Default()
	rou.Use(TlsHandler())

	//404处理
	g.NoRoute(func(c *gin.Context){
		c.String(http.StatusNotFound,"该路径不存在")
	})
	//健康检查中间件
	g.GET("/",service.Index)//主页
	g.GET("/chat",service.AiChat)//
}

//监听路由,手动访问https
func TlsHandler() gin.HandlerFunc {
	sslhost := "go.daily886.com:"+viper.GetString("common.server.addr")
	log.Println("sslhost:",sslhost)
	return func(c *gin.Context) {
		secureMiddleware := secure.New(secure.Options{
			SSLRedirect: true,
			SSLHost:     sslhost,
		})
		err := secureMiddleware.Process(c.Writer, c.Request)

		// If there was an error, do not continue.
		if err != nil {
			return
		}

		判断get访问 ,
		//这里的只能手动访问https, 如果要跳转,就要用http监听多另外一个端口,监听后跳到https就可以了
		//log.Println("c.Request.Method",c.Request.Method)
		//if c.Request.Method == "GET"{
		//	/*
		//	fmt.Println(c.Request.Proto)
		//	// output:HTTP/1.1
		//	fmt.Println(c.Request.TLS)
		//	// output: <nil>
		//	fmt.Println(c.Request.Host)
		//	// output: localhost:9090
		//	fmt.Println(c.Request.RequestURI)
		//	// output: /index?id=1
		//	*/
		//
		//	//判断是否https
		//	log.Println("c.Request.TLS",c.Request.TLS)
		//	if c.Request.TLS == nil { //不是https
		//		newurls := strings.Join([]string{"https://", c.Request.Host, c.Request.RequestURI}, "")
		//		log.Println("newurls",newurls)
		//		c.Redirect(http.StatusMovedPermanently,newurls) //重定向到https
		//	}
		//}

		c.Next()
	}
}

修改文件 aichat/main.go ,main.go 内容如下:

package main

import (
	"log"

	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"

	"aichat/config"
	"aichat/router"
)

func main() {
	if err := config.Init();err != nil{
		panic(err)
	}
	//设置gin模式
	gin.SetMode(viper.GetString("common.server.runmode"))

	//创建一个gin引擎
	g := gin.New()

	router.InitRouter(g)
	log.Printf("开始监听服务器地址: %s\n", viper.GetString("common.server.url"))

	// Listen and Server in https://127.0.0.1:8080
	//err := g.Run(viper.GetString("common.server.addr")) //使用http
	err := g.RunTLS( //使用https
		viper.GetString("common.server.addr"),
		"/usr/local/orange/conf/cert/online/go.daily886.com.pem",
		"/usr/local/orange/conf/cert/online/go.daily886.com.key")
	if err != nil {
		log.Fatal("监听错误:", err)
	}


}

打包并运行

[root@izj6c4jirdug8kh3uo6rdez aichat]# go build
[root@izj6c4jirdug8kh3uo6rdez aichat]# ./aichat
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /                         --> aichat/service.Index (6 handlers)
[GIN-debug] GET    /chat                     --> aichat/service.AiChat (6 handlers)
[GIN-debug] Listening and serving HTTPS on :6663

访问结果如下:

参考:https://www.jianshu.com/p/01057d2c37e4

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值