Ich habe Probleme beim Umleiten von HTTP-Verkehr in HTTPS in meiner EC2-Instanz auf einem Golang-Service. Die Verbindung funktioniert einwandfrei, wenn Sie direkt zu https://sub.domain.com gehen, aber die Umleitung von HTTP scheint nicht zu funktionieren.Golan Redirect zu HTTPS in AWS
Es gibt keinen Load Balancer und es wird nur das net/http-Paket als Webserver verwendet.
Ich verwende auch iptables, die HTTP/HTTPS-Anfragen an Ports 8080/8081 jeweils umleiten sollten.
Um die Möglichkeiten einzuschränken, verfügt die Sicherheitsgruppe, die auf die Instanz angewendet wird, über Verbindungen zu den Ports 80 und 443, die von einer beliebigen IPv4- oder IPv6-Adresse aus zulässig sind.
Hier ist der Server-Code, der HTTPS bedient und HTTP-Anfragen umleiten soll;
// LetsEncrypt setup
certManager := autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("sub.domain.com"), // your domain here
Cache: autocert.DirCache("certs"), // folder for storing certificates
}
server := &http.Server{
Addr: ":8081",
Handler: context.ClearHandler(http.DefaultServeMux),
TLSConfig: &tls.Config{GetCertificate: certManager.GetCertificate},
}
// open https server
err = server.ListenAndServeTLS("", "")
if err != nil {
fmt.Printf("ListenAndServe: %s\n", err)
}
// redirect everything to https
go http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
reqhost := strings.Split(r.Host, ":")[0]
http.Redirect(w, r, "https://" + reqhost + r.URL.Path, http.StatusMovedPermanently)
}))
Hier sind meine PREROUTING Regeln von iptables, andere Ketten sind leer;
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
7 420 REDIRECT tcp -- eth0 any anywhere anywhere tcp dpt:https redir ports 8081
45 2508 REDIRECT tcp -- eth0 any anywhere anywhere tcp dpt:http redir ports 8080
Beide Umleitungen werden immer Pakete auf Anfragen, aber die 8080 einfach gewohnt die Verbindung zum HTTPS Seite umleiten.
verwenden Sie einen beliebigen Webserver (nginx oder apache) für Ihre Anwendung –
Kein Webserver, nur das net/http-Paket. – manifest
* "8080 wird die Verbindung nicht umleiten" * Also, wenn es nicht die HTTP-Weiterleitung macht, was macht es dann **? Behandeln Sie die Anfrage wie gewohnt? Auszeit? Verbindung abgelehnt? –