转发请求时上报反向代理信息

This commit is contained in:
ExplodingDragon
2025-05-15 23:29:34 +08:00
parent b8cf863f18
commit 12eb21a5cd
2 changed files with 11 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"io"
"mime"
"net"
"net/http"
"net/http/httputil"
"net/url"
@@ -137,8 +138,16 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error
request.RequestURI = request.URL.RequestURI()
proxy := httputil.NewSingleHostReverseProxy(u)
proxy.Transport = s.options.HttpClient.Transport
if host, _, err := net.SplitHostPort(request.RemoteAddr); err == nil {
request.Header.Set("X-Real-IP", host)
}
request.Header.Set("X-Page-IP", utils.GetRemoteIP(request))
request.Header.Set("X-Page-Refer", fmt.Sprintf("%s/%s/%s", meta.Owner, meta.Repo, meta.Path))
request.Header.Set("X-Page-Host", request.Host)
zap.L().Debug("命中反向代理", zap.Any("prefix", prefix), zap.Any("backend", backend),
zap.Any("path", proxyPath), zap.Any("target", fmt.Sprintf("%s%s", u, targetPath)))
// todo(security): 处理 websocket
proxy.ServeHTTP(writer, request)
return nil
}