'Golang gin gonic web framework proxy route to another backend
How to reverse proxy web requests for a few routes to another backend in Gin Gonic web golang framework
Is there a way to directly forward in the Handle function as shown below?
router := gin.New()
router.Handle("POST", "/api/v1/endpoint1", ForwardToAnotherBackend)
Solution 1:[1]
You can do this with the standard library httputil.ReverseProxy.
I haven't found a reason to use gin myself yet, I'm a fan of sticking to stdlib whenever possible.
However I believe you can wrap this ReverseProxy handler in gin.WrapH()
to be able to use it with your gin router.
Solution 2:[2]
This was the solution I used for reverse-proxying a specific subset of endpoints from gin framework to another backend:
router.POST("/api/v1/endpoint1", ReverseProxy())
and:
func ReverseProxy() gin.HandlerFunc {
target := "localhost:3000"
return func(c *gin.Context) {
director := func(req *http.Request) {
r := c.Request
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)
}
}
Solution 3:[3]
when you use director:
req.URL.Scheme = "http"
req.Host, req.URL.Host = "google.com", "google.com"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | baloo |
Solution 2 | blackgreen |
Solution 3 | kaynAw |