fix: revert followRedirectTransport, remove incorrect /github prefix prepend
Build and Push to GHCR / build-and-push (push) Has been cancelled
Build and Push to GHCR / build-and-push (push) Has been cancelled
- followRedirectTransport used http.Client.Do which conflicts with ReverseProxy's RequestURI setting → "Request.RequestURI can't be set" - The auth proxy github case was incorrectly prepending /github to paths like /arkylin, causing /github/arkylin to be forwarded to GitHub. Just pass the path through directly. via [HAPI](https://hapi.run) Co-Authored-By: HAPI <[email protected]>
This commit is contained in:
+1
-1
@@ -178,7 +178,7 @@ func buildHandler(cfg *config.Config) (*admin.Handler, http.Handler) {
|
|||||||
}
|
}
|
||||||
ghcrProxy.ServeHTTP(w, r)
|
ghcrProxy.ServeHTTP(w, r)
|
||||||
case "github":
|
case "github":
|
||||||
middleware.StripPrefix("/github", githubProxy).ServeHTTP(w, r)
|
githubProxy.ServeHTTP(w, r)
|
||||||
default:
|
default:
|
||||||
dockerProxy.ServeHTTP(w, r)
|
dockerProxy.ServeHTTP(w, r)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,20 +13,6 @@ import (
|
|||||||
"mirror-proxy/internal/auth"
|
"mirror-proxy/internal/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
// followRedirectTransport 包装 http.RoundTripper,自动跟随 3xx 重定向。
|
|
||||||
// 用于 DynamicProxy,避免浏览器在 HTTP 代理上看到 HTTPS→HTTP 的 302 降级警告。
|
|
||||||
type followRedirectTransport struct {
|
|
||||||
base http.RoundTripper
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *followRedirectTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
||||||
client := &http.Client{
|
|
||||||
Transport: t.base,
|
|
||||||
CheckRedirect: func(req *http.Request, via []*http.Request) error { return nil },
|
|
||||||
}
|
|
||||||
return client.Do(req)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DynamicProxy 创建指向任意目标 URL 的反向代理
|
// DynamicProxy 创建指向任意目标 URL 的反向代理
|
||||||
func DynamicProxy(targetURL string) http.Handler {
|
func DynamicProxy(targetURL string) http.Handler {
|
||||||
target, err := url.Parse(targetURL)
|
target, err := url.Parse(targetURL)
|
||||||
@@ -106,13 +92,11 @@ func DynamicProxy(targetURL string) http.Handler {
|
|||||||
w.WriteHeader(http.StatusBadGateway)
|
w.WriteHeader(http.StatusBadGateway)
|
||||||
fmt.Fprintf(w, "Proxy error: %s", err.Error())
|
fmt.Fprintf(w, "Proxy error: %s", err.Error())
|
||||||
},
|
},
|
||||||
Transport: &followRedirectTransport{
|
Transport: &http.Transport{
|
||||||
base: &http.Transport{
|
MaxIdleConns: 100,
|
||||||
MaxIdleConns: 100,
|
MaxIdleConnsPerHost: 20,
|
||||||
MaxIdleConnsPerHost: 20,
|
IdleConnTimeout: 90 * time.Second,
|
||||||
IdleConnTimeout: 90 * time.Second,
|
TLSHandshakeTimeout: 10 * time.Second,
|
||||||
TLSHandshakeTimeout: 10 * time.Second,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user