2017-08-08 239 views
-1

我有一堆运行在一台服务器上的网站(单个IP),它们都在高端口上运行,所以我不需要root来运行它们。如何从端口80到端口XXXX无缝连接/转发?

当某人从一个网址访问,可以说,http://address001.com/,我希望能够无缝管材的数据,从4444到谁提出这个要求的人,如果有人访问http://address002.com/我希望通过管道从端口5555的数据。

我该怎么做Go?

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

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

将不是很容易,只需使用'nginx'来代表请求到你想要的进程? –

+0

不,不会,我已经这样做了。 – hermancain

+0

你在这里描述的是用nginx,apache,caddy等更简单的方法。你需要做什么改变?如果您确实需要编写一个反向代理,那么众多在线示例中的哪些不起作用? – JimB

回答

2

可以使用httputil的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)) 
}