This commit is contained in:
2026-05-12 01:13:01 +02:00
commit bf304e17c9
46 changed files with 4358 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
package proxy
import (
"net/http"
"net/http/httputil"
"net/url"
"github.com/labstack/echo/v4"
)
type Handler struct {
target *url.URL
proxy *httputil.ReverseProxy
}
func New(target string) (*Handler, error) {
parsed, err := url.Parse(target)
if err != nil {
return nil, err
}
proxy := httputil.NewSingleHostReverseProxy(parsed)
originalDirector := proxy.Director
proxy.Director = func(req *http.Request) {
originalDirector(req)
req.Host = parsed.Host
req.Header.Set("X-Forwarded-Host", req.Header.Get("Host"))
req.Header.Set("X-Forwarded-Proto", scheme(req))
}
return &Handler{
target: parsed,
proxy: proxy,
}, nil
}
func (h *Handler) Handle(c echo.Context) error {
h.proxy.ServeHTTP(c.Response(), c.Request())
return nil
}
func scheme(req *http.Request) string {
if req.TLS != nil {
return "https"
}
if header := req.Header.Get("X-Forwarded-Proto"); header != "" {
return header
}
return "http"
}