9

Gin Gonic Web Golang フレームワークで別のバックエンドへのいくつかのルートのプロキシ Web リクエストをリバースする方法

以下に示すように、ハンドル関数で直接転送する方法はありますか?

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

4

3 に答える 3

11

これは、特定のエンドポイントのサブセットを gin フレームワークから別のバックエンドにリバース プロキシするために使用したソリューションです。

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)
    }
}
于 2016-08-18T04:23:29.170 に答える