douwen1901 2018-07-04 19:57
浏览 98
已采纳

我缺少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 20: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))
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测