2016-05-31 15 views
8

私はTLSを実装しています。私は、httpからnginxのhttpsに書き換える方法を知っていますが、私はもはやnginxを使用しません。 Goでこれをどうやって正しく行うかわかりません。Goでhttpからhttpsに書き換え/リダイレクトするにはどうすればよいですか?

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!")) 
} 

どうすればいいですか?

答えて

5

ようhttpsにリダイレクトを扱ってハンドラを作成します。次に、HTTPトラフィックをリダイレクト

func redirectTLS(w http.ResponseWriter, r *http.Request) { 
    http.Redirect(w, r, "https://IPAddr:443"+r.RequestURI, http.StatusMovedPermanently) 
} 

go func() { 
    if err := http.ListenAndServe(":80", http.HandlerFunc(redirectTLS)); err != nil { 
     log.Fatalf("ListenAndServe error: %v", err) 
    } 
}() 
+0

はありがとうございました! – Alex

+1

のアドレスをリダイレクトするには、https:// "+ r.Host + r.RequestURI"を使用する方が良いでしょう。ホスト名やIPアドレスがハードコードされないようにします。 –

1
Package main 
import (
    "fmt" 
    "net/http" 
) 
func redirectToHttps(w http.ResponseWriter, r *http.Request) { 
    // Redirect the incoming HTTP request. Note that "127.0.0.1:443" will only work if you are accessing the server from your local machine. 
    http.Redirect(w, r, "https://127.0.0.1:443"+r.RequestURI, http.StatusMovedPermanently) 
} 
func handler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "Hi there!") 
    fmt.Println(r.RequestURI) 
} 
func main() { 
    http.HandleFunc("/", handler) 
    // Start the HTTPS server in a goroutine 
    go http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil) 
    // Start the HTTP server and redirect all incoming connections to HTTPS 
    http.ListenAndServe(":8080", http.HandlerFunc(redirectToHttps)) 
} 
+0

ありがとうございました!私は数時間前の他の投稿に答えました。良い一日を過ごしてください! – Alex

+0

明示的な127.0.0.1アドレスに問題はありますか?ドメイン名を連結する必要があります(例: "https://" + domain + r.RequestURI)。 –

+0

また、443はhttpsのデフォルトポートであり省略することができます。 –

関連する問題