2016-12-14 2 views
0

Iris-Go 웹 프레임 워크로 Golang의 ReverseProxy 기능을 연결할 수있는 사람 누구나. 나는 그것을 작동하게 할 수 없었다. 정규 net/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를 사용할 수 없습니다. 리버스 프록시, 왜냐하면 아이리스는 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의 서버에 나의 프록시를 구성 할 수 없다. 엑스 - 전달 - 말) .. 그래서 그 요청은 내가 언급 한 해당 서버로 전달해야합니다 ... – Ysak