package proxy import ( "log" "net/http" "net/http/httputil" "net/url" "github.com/gin-gonic/gin" ) func NewReverseProxy(target string) gin.HandlerFunc { targetURL, err := url.Parse(target) if err != nil { log.Fatalf("invalid proxy target URL: %s, err: %v", target, err) } proxy := &httputil.ReverseProxy{ Director: func(req *http.Request) { req.URL.Scheme = targetURL.Scheme req.URL.Host = targetURL.Host req.Host = targetURL.Host }, ErrorHandler: func(w http.ResponseWriter, r *http.Request, err error) { log.Printf("[proxy] error: %v", err) w.WriteHeader(http.StatusBadGateway) _, _ = w.Write([]byte(`{"code":50200,"message":"service unavailable"}`)) }, } return func(c *gin.Context) { proxy.ServeHTTP(c.Writer, c.Request) } }