Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Mirrored from https://github.com/Slazee/caddy.git
Synced Nov 11, 17:15 UTC
reverseproxy: Customizable dial network for SRV upstreams
By request of a sponsor
Matthew Holt committed
Feb 2, 2026 at 11:25 UTC
3bb22672f910f679b421b91fac3c7ad700df5255
2 files changed
+9
modules/caddyhttp/reverseproxy/caddyfile.go
+1
@@ -1528,6 +1528,7 @@ func (u *SRVUpstreams) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
1528
return d.Errf("bad delay value '%s': %v", d.Val(), err)
1529
}
1530
u.FallbackDelay = caddy.Duration(dur)
1531
+
1532
case "grace_period":
1533
if !d.NextArg() {
1534
return d.ArgErr()
modules/caddyhttp/reverseproxy/upstreams.go
+8
@@ -70,6 +70,11 @@ type SRVUpstreams struct {
70
// A negative value disables this.
71
FallbackDelay caddy.Duration `json:"dial_fallback_delay,omitempty"`
72
73
+ // Specific network to dial when connecting to the upstream(s)
74
+ // provided by SRV records upstream. See Go's net package for
75
+ // accepted values. For example, to restrict to IPv4, use "tcp4".
76
+ DialNetwork string `json:"dial_network,omitempty"`
77
+
78
resolver *net.Resolver
79
80
logger *zap.Logger
@@ -177,6 +182,9 @@ func (su SRVUpstreams) GetUpstreams(r *http.Request) ([]*Upstream, error) {
182
)
183
}
184
addr := net.JoinHostPort(rec.Target, strconv.Itoa(int(rec.Port)))
185
+ if su.DialNetwork != "" {
186
+ addr = su.DialNetwork + "/" + addr
187
+ }
188
upstreams[i] = Upstream{Dial: addr}
189
}
190