iloom/gateway/internal/proxy/reverse_proxy.go

35 lines
776 B
Go
Raw Permalink Normal View History

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)
}
}