如何使用go从端口80无缝管道/转发到端口XXXX?

时间:2017-08-08 01:41:53

标签: go

我有一堆网站在一台服务器上运行(单个IP),它们都运行在高端口上,因此我不需要root来运行它们。

当有人从一个网址访问时,我请说http://address001.com/,我想将数据从端口4444无缝地传输到发出此请求的人,如果有人访问http://address002.com/我想要管道端口5555的数据。

我如何在Go中执行此操作?

到目前为止,我有一个看起来像这样的处理函数:

func home(w http.ResponseWriter, r *http.Request) {                      
  if strings.Contains(r.Host, "address001") {                    
    // ???
  }                                                                      
}  

1 个答案:

答案 0 :(得分:2)

您可以使用httputil' s ReverseProxy

这是一个示例代码

package main

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

func main() {
    director := func(req *http.Request) {
        switch req.Host {
        case "address001.com":
            req.URL.Host = "localhost:4444"
            req.URL.Scheme = "http"
        case "address002.com":
            req.URL.Host = "localhost:5555"
            req.URL.Scheme = "http"
        default:
            log.Println("error")
        }
    }
    proxy := &httputil.ReverseProxy{Director: director}
    log.Fatalln(http.ListenAndServe(":8080", proxy))
}