iloom/gateway/internal/proxy/reverse_proxy.go
Chever John 9c39c8cbd7
init: iloom WMS monorepo with K8s deployment manifests
Go workspace (go.work) with 5 microservices + shared library:
- gateway (8080), auth-service (8081), purchaser-service (8082)
- textile-service (8083), washing-service (8084)
- shared: proto definitions, common packages

Infrastructure: docker-compose for local dev, K8s manifests for
K3s cluster deployment (mysql/redis/etcd + traefik ingress).

Frontend (iloom-flatten) added as git submodule.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-14 11:33:31 +08:00

35 lines
776 B
Go

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