之前我们搭建过一个 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