下面的代码在下面进一步产生错误。当我直接在任何浏览器中键入“ http://www.cnn.com/favicon.ico”时,它将正常工作。我猜想我缺少反向代理的一些关键配置。使它正常工作所需的最低配置是多少?
package main
import (
"net/http"
"net/http/httputil"
"net/url"
"log"
)
func main(){
url, _ := url.Parse("http://www.cnn.com/favicon.ico")
proxy := httputil.NewSingleHostReverseProxy(url)
http.HandleFunc("/", proxy.ServeHTTP)
log.Fatal(http.ListenAndServe(":9090", nil))
}
快速错误:未知域:localhost。请检查该域名 已添加到服务中。
详细信息:cache-lax8625-LAX
7月4日快乐!
答案 0 :(得分:2)
我进行了以下2处更改以使其正常工作:
首先,将代理指向www.cnn.com
而不是www.cnn.com/favicon.ico
。当然,现在我们必须向localhost:9090/favicon.ico
发出请求。
接下来,将代理请求的Host
字段设置为目标主机,而不是localhost
代理的主机。
代码最终看起来像这样:
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
type Director func(*http.Request)
func (f Director) Then(g Director) Director {
return func(req *http.Request) {
f(req)
g(req)
}
}
func hostDirector(host string) Director {
return func(req *http.Request) {
req.Host = host
}
}
func main() {
url, _ := url.Parse("http://www.cnn.com")
proxy := httputil.NewSingleHostReverseProxy(url)
d := proxy.Director
// sequence the default director with our host director
proxy.Director = Director(d).Then(hostDirector(url.Hostname()))
http.Handle("/", proxy)
log.Fatal(http.ListenAndServe(":9090", nil))
}