Nie wiem, dlaczego to odwrotne proxy nie działa. Widziałem kilka przykładów i nie mogę znaleźć w tym nic złego.golang ReverseProxy nie działa
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)
}
}
Loguje:
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 ""
Gdybym odkomentuj linię, która redefiniuje schematu komunikat o błędzie postać:
2014/04/18 21:38:05 http: proxy error: http: no Host in request URL
Gdybym odkomentuj linię, która redefiniuje gospodarz również, następnie serwer docelowy staje się stackoverflow.com (to znaczy, nigdy nie używa "myrealserver.com").
Jeśli poproszę o mylocalhost.com:8080/somepath (lub nawet /), otrzymam 404 od Stackoverflow, bez względu na to, czy stackoverflow.com/somepath istnieje czy nie. Jest napisane:
Couldn't find mylocalhost.com:8080
The Q&A site mylocalhost.com:8080 doesn't seem to exist... yet
Nie tłumaczy automatycznie nagłówka Host.
Jeśli następnie odkomentuję linię, która ustawia (i drugą, która drukuje) nagłówek "Host". Wtedy mogę przeczytać "stackoverflow.com" w dzienniku, ale nadal otrzymuję to samo 404 raportowanie strony, że próbuję uzyskać dostęp do "mylocalhost.com".
Używam go1.2.1 linux/amd64
Jak to jest, że ja powinienem zrobić program działa jako serwer proxy?