2017-08-08 240 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)) 
}