From 29d1701c343040c539f6926d73400fd1d6652bc9 Mon Sep 17 00:00:00 2001 From: Alexey <78480736+Olex1313@users.noreply.github.com> Date: Mon, 16 Jun 2025 22:50:09 +0300 Subject: [PATCH] Fix url scheme using for forwarded request with changed proto (#6884) --- weed/s3api/auth_signature_v4.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/weed/s3api/auth_signature_v4.go b/weed/s3api/auth_signature_v4.go index f3b2720ee..c70027106 100644 --- a/weed/s3api/auth_signature_v4.go +++ b/weed/s3api/auth_signature_v4.go @@ -719,9 +719,11 @@ func extractHostHeader(r *http.Request) string { forwardedHost := r.Header.Get("X-Forwarded-Host") forwardedPort := r.Header.Get("X-Forwarded-Port") + forwardedProto := r.Header.Get("X-Forwarded-Proto") // If X-Forwarded-Host is set, use that as the host. // If X-Forwarded-Port is set, use that too to form the host. + // If X-Forwarded-Proto is set, check if is it default to omit the port. if forwardedHost != "" { extractedHost := forwardedHost host, port, err := net.SplitHostPort(extractedHost) @@ -731,7 +733,11 @@ func extractHostHeader(r *http.Request) string { forwardedPort = port } } - if !isDefaultPort(r.URL.Scheme, forwardedPort) { + scheme := r.URL.Scheme + if forwardedProto != "" { + scheme = forwardedProto + } + if !isDefaultPort(scheme, forwardedPort) { extractedHost = net.JoinHostPort(extractedHost, forwardedPort) } return extractedHost