Golang gin gonic web framework proxy route to another backend
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.
when you use director:
req.URL.Scheme = "http"
req.Host, req.URL.Host = "google.com", "google.com"
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)
}
}