douwen1901 2018-07-04 11:57
浏览 101
已采纳

我缺少httputil.NewSingleHostReverseProxy的什么配置?

The code below produces the error further below. When I type "http://www.cnn.com/favicon.ico" straight into any browser it works without issue. I am guessing that I am missing some critical configuration for the reverse proxy. What is the minimum config needed for getting this to work?

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

Fastly error: unknown domain: localhost. Please check that this domain has been added to a service.

Details: cache-lax8625-LAX

Happy 4th of July!

  • 写回答

1条回答 默认 最新

  • dongxiai3003 2018-07-04 12:15
    关注

    I made the following 2 changes to get it working:

    Firstly, point the proxy at www.cnn.com instead of www.cnn.com/favicon.ico. Of course, now we must make our request to localhost:9090/favicon.ico.

    Next, set the proxied request's Host field to the target host, not the host of the proxy which is localhost.

    The code ends up looking like this:

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

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部