@marcel91200 / caddy Mirror · read-only / commits / 3bb22672
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 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