我已经设置了TLS,它可以工作。我知道如何在nginx中从http重写为https,但是我不再使用nginx。我不知道如何在Go中正确执行此操作。
func main() { certificate := "/srv/ssl/ssl-bundle.crt" privateKey := "/srv/ssl/mykey.key" http.HandleFunc("/", rootHander) // log.Fatal(http.ListenAndServe(":80", nil)) log.Fatal(http.ListenAndServeTLS(":443", certificate, privateKey, nil)) } func rootHander(w http.ResponseWriter, r *http.Request) { w.Write([]byte("To the moon!")) }
我将如何以一种好的方式做到这一点?
创建一个处理程序,以处理重定向到https的操作,例如:
func redirectTLS(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "https://IPAddr:443"+r.RequestURI, http.StatusMovedPermanently) }
然后重定向http流量:
go func() { if err := http.ListenAndServe(":80", http.HandlerFunc(redirectTLS)); err != nil { log.Fatalf("ListenAndServe error: %v", err) } }()