2016-08-16 4 views
1

Как обратный прокси-сервер веб-запросы для нескольких маршрутов к другому бэкэнду в рамках Gin Gonic веба golangGolang джин gonic фреймворк прокси маршрут к другому бэкэнду

Есть ли способ, чтобы прямо вперед в функции ручки, как показано ниже?

router := gin.New() router.Handle("POST", "/api/v1/endpoint1", ForwardToAnotherBackend)

ответ

2

Вы можете сделать это с помощью стандартной библиотеки httputil.ReverseProxy.

Я еще не нашел повода для использования джина, я поклонник прилипания к stdlib, когда это возможно. Однако я считаю, что вы можете обернуть этот обработчик ReverseProxy в gin.WrapH(), чтобы иметь возможность использовать его с вашим gin-маршрутизатором.

+0

Спасибо за помощь. Не могли бы вы привести мне пример того, как это сделать? –

+0

@alpha_cod Перейдите по ссылке выше и нажмите кнопку Пример на этой странице. Вам просто нужно адаптировать это к джину, если вам действительно нужно использовать их маршрутизатор. – baloo

+0

Спасибо. Сработало! –

3

Этого решения я использовал для обратного проксировании определенного подмножества конечных точек из рамок джина к другому бэкэнду:

router.POST("/api/v1/endpoint1", ReverseProxy() 

func ReverseProxy() gin.HandlerFunc { 

    target := "localhost:3000" 

    return func(c *gin.Context) { 
     director := func(req *http.Request) { 
      r := c.Request 
      req = r 
      req.URL.Scheme = "http" 
      req.URL.Host = target 
      req.Header["my-header"] = []string{r.Header.Get("my-header")} 
      // Golang camelcases headers 
      delete(req.Header, "My-Header") 
     } 
     proxy := &httputil.ReverseProxy{Director: director} 
     proxy.ServeHTTP(c.Writer, c.Request) 
    } 
} 
+0

Я получил это сообщение об ошибке '' 'http: прокси-ошибка: неподдерживаемая схема протокола" "' ''. Мне нужно прокомментировать '' 'req = r''', поэтому обратный прокси-сервер будет работать. – chinuy