beego https服务重启、多证书支持

1 篇文章 0 订阅
0 篇文章 0 订阅

 app.go 

type App struct {
	Handlers *ControllerRegister
	Server   *http.Server
	HttpsServer   *http.Server
}



// NewApp returns a new beego application.
func NewApp() *App {
	cr := NewControllerRegister()
	app := &App{Handlers: cr, Server: &http.Server{},HttpsServer:&http.Server{}}
	return app
}

func ListenAndServeTLSSNI() error {
	addr := ":https"
	certs := BConfig.Listen.Certs
	BeeApp.HttpsServer = &http.Server{}
	srv :=  BeeApp.HttpsServer
	srv.Handler = BeeApp.Handlers
	config := &tls.Config{}
	if srv.TLSConfig != nil {
		*config = *srv.TLSConfig
	}
	if config.NextProtos == nil {
		config.NextProtos = []string{"http/1.1"}
	}

	var err error

	config.Certificates = make([]tls.Certificate, len(certs))
	for i, v := range certs {
		config.Certificates[i], err = tls.LoadX509KeyPair(v.CertFile, v.KeyFile)
		if err != nil {
			return err
		}
	}

	config.BuildNameToCertificate()

	conn, err := net.Listen("tcp", addr)
	if err != nil {
		return err
	}

	tlsListener := tls.NewListener(conn, config)
	err = srv.Serve(tlsListener)
	if err!=nil {
		return err
	}
	return nil
}

Config.go 

// Listen holds for http and https related config
type Listen struct {
	Graceful          bool // Graceful means use graceful module to start the server
	ServerTimeOut     int64
	ListenTCP4        bool
	EnableHTTP        bool
	HTTPAddr          string
	HTTPPort          int
	AutoTLS           bool
	Domains           []string
	TLSCacheDir       string
	EnableHTTPS       bool
	EnableMutualHTTPS bool
	HTTPSAddr         string
	HTTPSPort         int
	HTTPSCertFile     string
	HTTPSKeyFile      string
	TrustCaFile       string
	EnableAdmin       bool
	AdminAddr         string
	AdminPort         int
	EnableFcgi        bool
	EnableStdIo       bool // EnableStdIo works with EnableFcgi Use FCGI via standard I/O
	EnableCRTS		  bool
	Certs			  []Certificates
}

type Certificates struct {
	CertFile	string
	KeyFile		string
}

main.go

beego.BConfig.Listen.Certs = [
    {CertFile: "static/a.crt",KeyFile: "static/a.key"},
    {CertFile: "static/b.crt",KeyFile: "static/b.key"},
    {CertFile: "static/c.crt",KeyFile: "static/c.key"},
]
beego.Run()

//开启https 服务
beego.ListenAndServeTLSSNI();
//停止https 服务
beego.BeeApp.HttpsServer.Shutdown(nil)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值