diff options
author | Matt Holt <mholt@users.noreply.github.com> | 2020-03-24 10:53:53 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-24 10:53:53 -0600 |
commit | e02117cb8a2b0b6dbd3dbb1de4d1569ff63ca617 (patch) | |
tree | a8008200912b63d53cad356a83b5a912b7abe112 /modules/caddyhttp/reverseproxy/caddyfile.go | |
parent | 95b2863df2718722a9addd93ac1e88f4debc5235 (diff) |
reverse_proxy: Add support for SRV backends (#3180)
* reverse_proxy: Begin SRV lookup support (WIP)
* reverse_proxy: Finish adding support for SRV-based backends (#3179)
Diffstat (limited to 'modules/caddyhttp/reverseproxy/caddyfile.go')
-rw-r--r-- | modules/caddyhttp/reverseproxy/caddyfile.go | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/modules/caddyhttp/reverseproxy/caddyfile.go b/modules/caddyhttp/reverseproxy/caddyfile.go index 9ff9dce..cefb5b6 100644 --- a/modules/caddyhttp/reverseproxy/caddyfile.go +++ b/modules/caddyhttp/reverseproxy/caddyfile.go @@ -177,13 +177,36 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { return net.JoinHostPort(host, port), nil } + // appendUpstream creates an upstream for address and adds + // it to the list. If the address starts with "srv+" it is + // treated as a SRV-based upstream, and any port will be + // dropped. + appendUpstream := func(address string) error { + isSRV := strings.HasPrefix(address, "srv+") + if isSRV { + address = strings.TrimPrefix(address, "srv+") + } + dialAddr, err := upstreamDialAddress(address) + if err != nil { + return err + } + if isSRV { + if host, _, err := net.SplitHostPort(dialAddr); err == nil { + dialAddr = host + } + h.Upstreams = append(h.Upstreams, &Upstream{LookupSRV: dialAddr}) + } else { + h.Upstreams = append(h.Upstreams, &Upstream{Dial: dialAddr}) + } + return nil + } + for d.Next() { for _, up := range d.RemainingArgs() { - dialAddr, err := upstreamDialAddress(up) + err := appendUpstream(up) if err != nil { return err } - h.Upstreams = append(h.Upstreams, &Upstream{Dial: dialAddr}) } for d.NextBlock(0) { @@ -194,11 +217,10 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { return d.ArgErr() } for _, up := range args { - dialAddr, err := upstreamDialAddress(up) + err := appendUpstream(up) if err != nil { return err } - h.Upstreams = append(h.Upstreams, &Upstream{Dial: dialAddr}) } case "lb_policy": |