Ich weiß nicht, warum dieser Reverse-Proxy nicht funktioniert. Ich habe mehrere Beispiele gesehen und kann nichts falsch finden.Golang ReverseProxy funktioniert nicht
package main
import (
"log"
"net/url"
"net/http"
"net/http/httputil"
)
func report(r *http.Request){
log.Print("URL: " + r.URL.Path)
log.Print("Scheme: " + r.URL.Scheme)
log.Print("Host: " + r.URL.Host)
//r.URL.Scheme = "http"
//r.URL.Host = "stackoverflow.com"
//r.Header.Set("Host", "stackoverflow.com")
//log.Print("Header Host: " + r.Header.Get("Host"))
}
func main() {
proxy := httputil.NewSingleHostReverseProxy(&url.URL{Scheme:"http",Host:"myrealserver.com"})
proxy.Director = report
// http.Handle("/", proxy)
error := http.ListenAndServe("mylocalhost.com:8080", proxy)
if(error != nil) {
log.Fatal(error)
}
}
Es protokolliert:
2014/04/18 21:32:50 URL: /arg/es
2014/04/18 21:32:50 Scheme:
2014/04/18 21:32:50 Host:
2014/04/18 21:32:50 http: proxy error: unsupported protocol scheme ""
2014/04/18 21:32:51 URL: /favicon.ico
2014/04/18 21:32:51 Scheme:
2014/04/18 21:32:51 Host:
2014/04/18 21:32:51 http: proxy error: unsupported protocol scheme ""
Wenn ich Kommentar- der Zeile, die das Schema der Fehlermeldung wird neu definiert:
2014/04/18 21:38:05 http: proxy error: http: no Host in request URL
Wenn ich Kommentar- der Zeile, die auch den Host neu definiert, dann Der Zielserver wird stackoverflow.com (ich meine, er verwendet nie "myrealserver.com").
Wenn ich nach mylocalhost.com:8080/somepath (oder sogar /) frage, bekomme ich einen 404 von Stackoverflow, egal ob stackoverflow.com/somepath existiert oder nicht. Es sagt:
Couldn't find mylocalhost.com:8080
The Q&A site mylocalhost.com:8080 doesn't seem to exist... yet
Es übersetzt den Host-Header nicht automatisch.
Wenn ich dann die Zeile auskommentieren, die den Header "Host" setzt (und den anderen druckt). Dann kann ich "stackoverflow.com" im Protokoll lesen, aber ich bekomme immer noch das gleiche 404-Seiten-Reporting, dass ich versuche auf "mylocalhost.com" zuzugreifen.
Ich verwende go1.2.1 linux/amd64
Wie kommt es, dass soll ich das Programm funktioniert als Proxy machen?