2017-08-08 8 views
-1

私は1つのサーバー(単一IP)上で稼働する多数のWebサイトを持っており、それらはすべて高ポートで実行されるので、それらを実行するためにルートは必要ありません。goを使ってポート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

は、それだけに簡単にされることはありませんですhttputilのReverseProxy

を使用することができます'nginx'を使って、あなたが望むプロセスにリクエストをプロキシしますか? –

+0

いいえ、私はそれをそうしました。 – hermancain

+0

あなたがここで説明したことは、nginx、apache、caddyなどの方が簡単です。何が必要なのですか?リバースプロキシを作成する必要がある場合は、多数のオンラインサンプルのうち何が機能しませんか? – JimB

答えて

2

あなたがここにサンプルコード

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)) 
} 
関連する問題