diff options
author | Francis Lavoie <lavofr@gmail.com> | 2023-05-15 14:14:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-15 12:14:50 -0600 |
commit | 75b690d248c7681dd974f6179c98a363af417a25 (patch) | |
tree | f0df0da211635df094d6b4b9aa6e3f58a7e577a0 /modules/caddyhttp/reverseproxy/caddyfile.go | |
parent | 52d7335c2b1b8424e8971a9b03f51a5f36583535 (diff) |
reverseproxy: Expand port ranges to multiple upstreams in CLI + Caddyfile (#5494)
* reverseproxy: Expand port ranges to multiple upstreams in CLI + Caddyfile
* Add clarifying comment
Diffstat (limited to 'modules/caddyhttp/reverseproxy/caddyfile.go')
-rw-r--r-- | modules/caddyhttp/reverseproxy/caddyfile.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/modules/caddyhttp/reverseproxy/caddyfile.go b/modules/caddyhttp/reverseproxy/caddyfile.go index 728bc2f..a79bd09 100644 --- a/modules/caddyhttp/reverseproxy/caddyfile.go +++ b/modules/caddyhttp/reverseproxy/caddyfile.go @@ -15,6 +15,7 @@ package reverseproxy import ( + "fmt" "net/http" "reflect" "strconv" @@ -157,7 +158,25 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { } commonScheme = scheme - h.Upstreams = append(h.Upstreams, &Upstream{Dial: dialAddr}) + parsedAddr, err := caddy.ParseNetworkAddress(dialAddr) + if err != nil { + return d.WrapErr(err) + } + + if parsedAddr.StartPort == 0 && parsedAddr.EndPort == 0 { + // unix networks don't have ports + h.Upstreams = append(h.Upstreams, &Upstream{ + Dial: dialAddr, + }) + } else { + // expand a port range into multiple upstreams + for i := parsedAddr.StartPort; i <= parsedAddr.EndPort; i++ { + h.Upstreams = append(h.Upstreams, &Upstream{ + Dial: caddy.JoinNetworkAddress("", parsedAddr.Host, fmt.Sprint(i)), + }) + } + } + return nil } |