Solución:
Esta fue la solución que utilicé para hacer proxy inverso de un subconjunto específico de puntos finales desde el marco de gin a otro backend:
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)
}
}
Puede hacer esto con la biblioteca estándar httputil.ReverseProxy.
Todavía no he encontrado una razón para usar ginebra, soy fanático de apegarme a stdlib siempre que sea posible. Sin embargo, creo que puede envolver este controlador ReverseProxy en gin.WrapH()
para poder utilizarlo con su enrutador gin.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)