mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-19 13:12:45 +08:00
reverse_proxy: Upstream.String() method returns either LookupSRV or Dial
Either Dial or LookupSRV will be set, but if we rely on Dial always being set, we could run into bugs. Note: Health checks don't support SRV upstreams.
This commit is contained in:
parent
397e04ebd9
commit
e207240f9a
|
@ -96,6 +96,13 @@ type Upstream struct {
|
||||||
cb CircuitBreaker
|
cb CircuitBreaker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u Upstream) String() string {
|
||||||
|
if u.LookupSRV != "" {
|
||||||
|
return u.LookupSRV
|
||||||
|
}
|
||||||
|
return u.Dial
|
||||||
|
}
|
||||||
|
|
||||||
// Available returns true if the remote host
|
// Available returns true if the remote host
|
||||||
// is available to receive requests. This is
|
// is available to receive requests. This is
|
||||||
// the method that should be used by selection
|
// the method that should be used by selection
|
||||||
|
|
|
@ -172,7 +172,7 @@ func (h *Handler) Provision(ctx caddy.Context) error {
|
||||||
for _, upstream := range h.Upstreams {
|
for _, upstream := range h.Upstreams {
|
||||||
// create or get the host representation for this upstream
|
// create or get the host representation for this upstream
|
||||||
var host Host = new(upstreamHost)
|
var host Host = new(upstreamHost)
|
||||||
existingHost, loaded := hosts.LoadOrStore(upstream.Dial, host)
|
existingHost, loaded := hosts.LoadOrStore(upstream.String(), host)
|
||||||
if loaded {
|
if loaded {
|
||||||
host = existingHost.(Host)
|
host = existingHost.(Host)
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ func (h *Handler) Cleanup() error {
|
||||||
|
|
||||||
// remove hosts from our config from the pool
|
// remove hosts from our config from the pool
|
||||||
for _, upstream := range h.Upstreams {
|
for _, upstream := range h.Upstreams {
|
||||||
hosts.Delete(upstream.Dial)
|
hosts.Delete(upstream.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -446,6 +446,7 @@ func (h *Handler) reverseProxy(rw http.ResponseWriter, req *http.Request, di Dia
|
||||||
}
|
}
|
||||||
|
|
||||||
h.logger.Debug("upstream roundtrip",
|
h.logger.Debug("upstream roundtrip",
|
||||||
|
zap.String("upstream", di.Upstream.String()),
|
||||||
zap.Object("request", caddyhttp.LoggableHTTPRequest{Request: req}),
|
zap.Object("request", caddyhttp.LoggableHTTPRequest{Request: req}),
|
||||||
zap.Object("headers", caddyhttp.LoggableHTTPHeader(res.Header)),
|
zap.Object("headers", caddyhttp.LoggableHTTPHeader(res.Header)),
|
||||||
zap.Duration("duration", duration),
|
zap.Duration("duration", duration),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user