diff --git a/caddytest/integration/caddyfile_adapt/reverse_proxy_ids.txt b/caddytest/integration/caddyfile_adapt/reverse_proxy_ids.txt new file mode 100644 index 000000000000..3dc75f484054 --- /dev/null +++ b/caddytest/integration/caddyfile_adapt/reverse_proxy_ids.txt @@ -0,0 +1,46 @@ +:8884 + +reverse_proxy one|http://localhost two|http://localhost { + to three|http://localhost four|http://localhost +} +---------- +{ + "apps": { + "http": { + "servers": { + "srv0": { + "listen": [ + ":8884" + ], + "routes": [ + { + "handle": [ + { + "handler": "reverse_proxy", + "upstreams": [ + { + "dial": "localhost:80", + "id": "one" + }, + { + "dial": "localhost:80", + "id": "two" + }, + { + "dial": "localhost:80", + "id": "three" + }, + { + "dial": "localhost:80", + "id": "four" + } + ] + } + ] + } + ] + } + } + } + } +} diff --git a/modules/caddyhttp/reverseproxy/caddyfile.go b/modules/caddyhttp/reverseproxy/caddyfile.go index c7f555f8a44e..f6d4ce578c33 100644 --- a/modules/caddyhttp/reverseproxy/caddyfile.go +++ b/modules/caddyhttp/reverseproxy/caddyfile.go @@ -219,6 +219,12 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { // treated as a SRV-based upstream, and any port will be // dropped. appendUpstream := func(address string) error { + var id string + if strings.Contains(address, "|") { + parts := strings.SplitN(address, "|", 2) + id = parts[0] + address = parts[1] + } isSRV := strings.HasPrefix(address, "srv+") if isSRV { address = strings.TrimPrefix(address, "srv+") @@ -231,9 +237,9 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { if host, _, err := net.SplitHostPort(dialAddr); err == nil { dialAddr = host } - h.Upstreams = append(h.Upstreams, &Upstream{LookupSRV: dialAddr}) + h.Upstreams = append(h.Upstreams, &Upstream{ID: id, LookupSRV: dialAddr}) } else { - h.Upstreams = append(h.Upstreams, &Upstream{Dial: dialAddr}) + h.Upstreams = append(h.Upstreams, &Upstream{ID: id, Dial: dialAddr}) } return nil }