From 9b9a77a160dc342b581c464545703915c8518477 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sat, 24 Sep 2016 14:22:13 -0600 Subject: [PATCH] proxy: Improved error reporting We now report the actual error message rather than a generic one --- caddyhttp/proxy/proxy.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/caddyhttp/proxy/proxy.go b/caddyhttp/proxy/proxy.go index 89fa21ae1..36544b2ec 100644 --- a/caddyhttp/proxy/proxy.go +++ b/caddyhttp/proxy/proxy.go @@ -13,8 +13,6 @@ import ( "github.com/mholt/caddy/caddyhttp/httpserver" ) -var errUnreachable = errors.New("unreachable backend") - // Proxy represents a middleware instance that can proxy requests. type Proxy struct { Next httpserver.Handler @@ -92,10 +90,14 @@ func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { // since Select() should give us "up" hosts, keep retrying // hosts until timeout (or until we get a nil host). start := time.Now() + var backendErr error for time.Now().Sub(start) < tryDuration { host := upstream.Select(r) if host == nil { - return http.StatusBadGateway, errUnreachable + if backendErr == nil { + backendErr = errors.New("no hosts available upstream") + } + return http.StatusBadGateway, backendErr } if rr, ok := w.(*httpserver.ResponseRecorder); ok && rr.Replacer != nil { rr.Replacer.Set("upstream", host.Name) @@ -141,7 +143,7 @@ func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { // tell the proxy to serve the request atomic.AddInt64(&host.Conns, 1) - backendErr := proxy.ServeHTTP(w, outreq, downHeaderUpdateFn) + backendErr = proxy.ServeHTTP(w, outreq, downHeaderUpdateFn) atomic.AddInt64(&host.Conns, -1) // if no errors, we're done here; otherwise failover @@ -159,7 +161,7 @@ func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { }(host, timeout) } - return http.StatusBadGateway, errUnreachable + return http.StatusBadGateway, backendErr } // match finds the best match for a proxy config based