Skip to content

Commit 05dbe1c

Browse files
reverseproxy: Replace health header placeholders (#5861)
1 parent 33d8d2c commit 05dbe1c

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

caddytest/integration/caddyfile_adapt/reverse_proxy_health_headers.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ reverse_proxy 127.0.0.1:65535 {
66
X-Header-Key 95ca39e3cbe7
77
X-Header-Keys VbG4NZwWnipo 335Q9/MhqcNU3s2TO
88
X-Empty-Value
9+
Same-Key 1
10+
Same-Key 2
11+
X-System-Hostname {system.hostname}
912
}
1013
health_uri /health
1114
}
@@ -29,6 +32,10 @@ reverse_proxy 127.0.0.1:65535 {
2932
"Host": [
3033
"example.com"
3134
],
35+
"Same-Key": [
36+
"1",
37+
"2"
38+
],
3239
"X-Empty-Value": [
3340
""
3441
],
@@ -38,6 +45,9 @@ reverse_proxy 127.0.0.1:65535 {
3845
"X-Header-Keys": [
3946
"VbG4NZwWnipo",
4047
"335Q9/MhqcNU3s2TO"
48+
],
49+
"X-System-Hostname": [
50+
"{system.hostname}"
4151
]
4252
},
4353
"uri": "/health"

modules/caddyhttp/reverseproxy/caddyfile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
372372
if len(values) == 0 {
373373
values = append(values, "")
374374
}
375-
healthHeaders[key] = values
375+
healthHeaders[key] = append(healthHeaders[key], values...)
376376
}
377377
if h.HealthChecks == nil {
378378
h.HealthChecks = new(HealthChecks)

modules/caddyhttp/reverseproxy/healthchecks.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,17 @@ func (h *Handler) doActiveHealthCheck(dialInfo DialInfo, hostAddr string, upstre
358358
}
359359
ctx = context.WithValue(ctx, caddyhttp.OriginalRequestCtxKey, *req)
360360
req = req.WithContext(ctx)
361-
for key, hdrs := range h.HealthChecks.Active.Headers {
361+
362+
// set headers, using a replacer with only globals (env vars, system info, etc.)
363+
repl := caddy.NewReplacer()
364+
for key, vals := range h.HealthChecks.Active.Headers {
365+
key = repl.ReplaceAll(key, "")
362366
if key == "Host" {
363-
req.Host = h.HealthChecks.Active.Headers.Get(key)
364-
} else {
365-
req.Header[key] = hdrs
367+
req.Host = repl.ReplaceAll(h.HealthChecks.Active.Headers.Get(key), "")
368+
continue
369+
}
370+
for _, val := range vals {
371+
req.Header.Add(key, repl.ReplaceKnown(val, ""))
366372
}
367373
}
368374

0 commit comments

Comments
 (0)