Skip to content

Commit

Permalink
reverseproxy: Replace health header placeholders (#5861)
Browse files Browse the repository at this point in the history
  • Loading branch information
francislavoie authored Oct 11, 2023
1 parent 33d8d2c commit 05dbe1c
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ reverse_proxy 127.0.0.1:65535 {
X-Header-Key 95ca39e3cbe7
X-Header-Keys VbG4NZwWnipo 335Q9/MhqcNU3s2TO
X-Empty-Value
Same-Key 1
Same-Key 2
X-System-Hostname {system.hostname}
}
health_uri /health
}
Expand All @@ -29,6 +32,10 @@ reverse_proxy 127.0.0.1:65535 {
"Host": [
"example.com"
],
"Same-Key": [
"1",
"2"
],
"X-Empty-Value": [
""
],
Expand All @@ -38,6 +45,9 @@ reverse_proxy 127.0.0.1:65535 {
"X-Header-Keys": [
"VbG4NZwWnipo",
"335Q9/MhqcNU3s2TO"
],
"X-System-Hostname": [
"{system.hostname}"
]
},
"uri": "/health"
Expand Down
2 changes: 1 addition & 1 deletion modules/caddyhttp/reverseproxy/caddyfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
if len(values) == 0 {
values = append(values, "")
}
healthHeaders[key] = values
healthHeaders[key] = append(healthHeaders[key], values...)
}
if h.HealthChecks == nil {
h.HealthChecks = new(HealthChecks)
Expand Down
14 changes: 10 additions & 4 deletions modules/caddyhttp/reverseproxy/healthchecks.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,11 +358,17 @@ func (h *Handler) doActiveHealthCheck(dialInfo DialInfo, hostAddr string, upstre
}
ctx = context.WithValue(ctx, caddyhttp.OriginalRequestCtxKey, *req)
req = req.WithContext(ctx)
for key, hdrs := range h.HealthChecks.Active.Headers {

// set headers, using a replacer with only globals (env vars, system info, etc.)
repl := caddy.NewReplacer()
for key, vals := range h.HealthChecks.Active.Headers {
key = repl.ReplaceAll(key, "")
if key == "Host" {
req.Host = h.HealthChecks.Active.Headers.Get(key)
} else {
req.Header[key] = hdrs
req.Host = repl.ReplaceAll(h.HealthChecks.Active.Headers.Get(key), "")
continue
}
for _, val := range vals {
req.Header.Add(key, repl.ReplaceKnown(val, ""))
}
}

Expand Down

0 comments on commit 05dbe1c

Please sign in to comment.