2016-12-14 11 views
0

Iris-Go Webフレームワークを使用してGolangのReverseProxy機能を配線することができます。私はそれを働かせることができませんでした。私は定期的なネット/ httpでそれを配線することができます。Iris-Goフレームワークを使用したGolang ReverseProxy

func MultiHostReverseProxy(targets map[string]utils.Service) *httputil.ReverseProxy { 
    r := regexp.MustCompile(`\/proxy/(?P<Service>[a-zA-Z_-]*)(?P<Path>\/.*)`) 
    director := func(req *http.Request) { 
     if strings.HasPrefix(req.URL.Path, "/proxy/") { 
      temp := r.FindStringSubmatch(req.URL.Path); 
      if (len(temp) > 1) { 
       system := temp[1] 
       if val, ok := targets[system]; ok { 
        s := val.Host + ":" + val.Port 
        req.URL.Scheme = val.Scheme 
        req.URL.Host = s 
        req.URL.Path = temp[2] 

        if enc, ok := GetAxleHeader(req.Header); ok { 
         dec := utils.Decrypt(KEY, enc) 
         req.Header.Set(val.AuthHeader, dec) 
         req.Header.Set(AXLE_HEADER, "") 
        } else { 
         token, nq := utils.FindAxleToken(req.URL.RawQuery); 
         fmt.Printf("%s -> token : %s newQuery: %s\n", req.URL.RawQuery, token, nq); 
         if token != "" { 
          req.URL.RawQuery = nq 
          dec := utils.Decrypt(KEY, token) 
          req.Header.Set(val.AuthHeader, dec) 
          req.Header.Set(AXLE_HEADER, "") 
         } 
        } 
       } 
      } 
     } 
    } 
    return &httputil.ReverseProxy{Director: director} 
} 

どのようにしてこの逆プロキシオブジェクトをアイリスフレームワークで使用できますか。

+1

誰もが虹彩を使用する理由を理解していないhttp://www.florinpatan.ro/2016/10/why-you-should-not-use-iris-for-your-go.html?m=1 – JimB

+0

あなたはhttputiを使用できませんlはリバースプロキシで、irisはstd lib net/httpパッケージを使用しないためです。 – JimB

+0

@JimBバージョン5以降、アイリスはnet/httpの上に構築され、HTTP/2機能を完成させます。 – kataras

答えて

0

のために役立つことがプロキシサーバーを作成し、それを実行する可能性があります。

import "github.com/kataras/iris/core/host" 
[...] 
target, _ := url.Parse("https://example.com") 
go host.NewProxy("example.com:80", target).ListenAndServe() 
// this will proxy all http://example.com to https://example.com 
// you can use that proxy as you like. 

新しいプロキシハンドラを作成し、どこでも好きな場所にそれを使用します。

import "github.com/kataras/iris/core/host" 
[...] 
target, _ := url.Parse("https://example.com") 
proxy := host.ProxyHandler(target) 
http.ListenAndServe("example.com:80", proxy) 
+0

ありがとうございました...私はあなたのレポに従っていますので、知っておいてください... – Ysak

+0

ダイナミックプロキシミングを行う方法はありますか?つまり、私のプロキシを定数3番目のサーバーに設定するのではなく、 X-Forward-Toと言っています)..その要求に応じて、そこに記載されている対応するサーバーに転送する必要があります。 – Ysak

関連する問題