@marcel91200 / caddy Mirror · read-only / commits / 868af6a0
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 12, 13:15 UTC

reverse_proxy: Add grace_period for SRV upstreams to Caddyfile (#6264)

Aziz Rmadi committed Apr 23, 2024 at 08:12 UTC 868af6a062290b82fb1d4d70697739974e814e50
2 files changed +48 -1
caddytest/integration/caddyfile_adapt/reverse_proxy_dynamic_upstreams_grace_period.caddyfiletest new
+38
@@ -0,0 +1,38 @@
1 +:8884 {
2 + reverse_proxy {
3 + dynamic srv {
4 + name foo
5 + refresh 5m
6 + grace_period 5s
7 + }
8 + }
9 +}
10 +----------
11 +{
12 + "apps": {
13 + "http": {
14 + "servers": {
15 + "srv0": {
16 + "listen": [
17 + ":8884"
18 + ],
19 + "routes": [
20 + {
21 + "handle": [
22 + {
23 + "dynamic_upstreams": {
24 + "grace_period": 5000000000,
25 + "name": "foo",
26 + "refresh": 300000000000,
27 + "source": "srv"
28 + },
29 + "handler": "reverse_proxy"
30 + }
31 + ]
32 + }
33 + ]
34 + }
35 + }
36 + }
37 + }
38 +}
\ No newline at end of file
modules/caddyhttp/reverseproxy/caddyfile.go
+10 -1
@@ -1356,6 +1356,7 @@ func (h *CopyResponseHeadersHandler) UnmarshalCaddyfile(d *caddyfile.Dispenser)
1356 // resolvers <resolvers...>
1357 // dial_timeout <timeout>
1358 // dial_fallback_delay <timeout>
1359 +// grace_period <duration>
1360 // }
1361 func (u *SRVUpstreams) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
1362 d.Next() // consume upstream source name
@@ -1435,7 +1436,15 @@ func (u *SRVUpstreams) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
1436 return d.Errf("bad delay value '%s': %v", d.Val(), err)
1437 }
1438 u.FallbackDelay = caddy.Duration(dur)
1438 -
1439 + case "grace_period":
1440 + if !d.NextArg() {
1441 + return d.ArgErr()
1442 + }
1443 + dur, err := caddy.ParseDuration(d.Val())
1444 + if err != nil {
1445 + return d.Errf("bad grace period value '%s': %v", d.Val(), err)
1446 + }
1447 + u.GracePeriod = caddy.Duration(dur)
1448 default:
1449 return d.Errf("unrecognized srv option '%s'", d.Val())
1450 }