dqzve68846 2016-06-24 15:02
浏览 156

反向代理不起作用

I am using GO's reverse proxy like this, but this does not work well

package main

import (
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    u, _ := url.Parse("http://www.darul.io")

    http.ListenAndServe(":9000", httputil.NewSingleHostReverseProxy(u))
}

when I visit the http://localhost:9000, I am seeing not expected page

enter image description here

  • 写回答

1条回答 默认 最新

  • dourui9570 2016-06-24 16:03
    关注

    From this article A Proper API Proxy Written in Go:

    httputil.NewSingleHostReverseProxy does not set the host of the request to the host of the destination server. If you’re proxying from foo.com to bar.com, requests will arrive at bar.com with the host of foo.com. Many webservers are configured to not serve pages if a request doesn’t appear from the same host.

    You need to define a custom middleware to set the required host parameter:

    package main
    
    import (
            "net/http"
            "net/http/httputil"
            "net/url"
    )
    
    func sameHost(handler http.Handler) http.Handler {
            return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                    r.Host = r.URL.Host
                    handler.ServeHTTP(w, r)
            })
    }
    
    func main()  {
            // initialize our reverse proxy
            u, _ := url.Parse("http://www.darul.io")
            reverseProxy := httputil.NewSingleHostReverseProxy(u)
            // wrap that proxy with our sameHost function
            singleHosted := sameHost(reverseProxy)
            http.ListenAndServe(":5000", singleHosted)
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了