2016-12-14 9 views
0

Любой, кто может подключить функциональность ReverseProxy от Golang с веб-фреймворком Iris-Go. Я не мог заставить его работать. Я могу подключить его с помощью обычной сети/http.Golang ReverseProxy с каркасом Iris-Go

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} 
} 

Как я могу использовать этот объект ReverseProxy с каркасом радужной оболочки;

+1

Я не понимаю, почему кто-то использует ирис http://www.florinpatan.ro/2016/10/why-you-should-not-use-iris-for-your-go.html?m=1 – JimB

+0

вы не можете использовать httputi l reverse proxy, потому что iris не использует пакет std lib net/http. – JimB

+0

@JimB После версии 5 Iris построена поверх сети/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

Есть ли способ сделать динамическое проксирование, значит, я не могу настроить свой прокси на постоянный третий сервер, а на входящие запросы Header (скажем, X-Forward-To) .. Так что запрос i должен быть отправлен на соответствующий сервер, упомянутый там ... – Ysak