aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey <78480736+Olex1313@users.noreply.github.com>2025-06-16 22:50:09 +0300
committerGitHub <noreply@github.com>2025-06-16 12:50:09 -0700
commit29d1701c343040c539f6926d73400fd1d6652bc9 (patch)
treeed845cd82b19c3604aa6ed6c9e1bb849481460be
parent78069605a61515e95adf6b56ff07195ada7197bc (diff)
downloadseaweedfs-29d1701c343040c539f6926d73400fd1d6652bc9.tar.xz
seaweedfs-29d1701c343040c539f6926d73400fd1d6652bc9.zip
Fix url scheme using for forwarded request with changed proto (#6884)
-rw-r--r--weed/s3api/auth_signature_v4.go8
1 files changed, 7 insertions, 1 deletions
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