diff --git a/docs/basics.md b/docs/basics.md index f5243c7ca..6203a427e 100644 --- a/docs/basics.md +++ b/docs/basics.md @@ -454,12 +454,12 @@ The deprecated way: #### Health Check -A health check can be configured in order to remove a backend from LB rotation as long as it keeps returning HTTP status codes other than `2xx` to HTTP GET requests periodically carried out by Traefik. +A health check can be configured in order to remove a backend from LB rotation as long as it keeps returning HTTP status codes other than `2xx` or `3xx` to HTTP GET requests periodically carried out by Traefik. The check is defined by a path appended to the backend URL and an interval (given in a format understood by [time.ParseDuration](https://golang.org/pkg/time/#ParseDuration)) specifying how often the health check should be executed (the default being 30 seconds). Each backend must respond to the health check within 5 seconds. By default, the port of the backend server is used, however, this may be overridden. -A recovering backend returning `2xx` responses again is being returned to the LB rotation pool. +A recovering backend returning `2xx` or `3xx` responses again is being returned to the LB rotation pool. For example: ```toml diff --git a/healthcheck/healthcheck.go b/healthcheck/healthcheck.go index ab9a2108f..f87e4a2ca 100644 --- a/healthcheck/healthcheck.go +++ b/healthcheck/healthcheck.go @@ -203,8 +203,8 @@ func checkHealth(serverURL *url.URL, backend *BackendHealthCheck) error { defer resp.Body.Close() - if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices { - return fmt.Errorf("received non-2xx status code: %v", resp.StatusCode) + if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusBadRequest { + return fmt.Errorf("received error status code: %v", resp.StatusCode) } return nil diff --git a/healthcheck/healthcheck_test.go b/healthcheck/healthcheck_test.go index 6ede3a847..004ba0c7b 100644 --- a/healthcheck/healthcheck_test.go +++ b/healthcheck/healthcheck_test.go @@ -47,6 +47,14 @@ func TestSetBackendsConfiguration(t *testing.T) { expectedNumUpsertedServers: 0, expectedGaugeValue: 1, }, + { + desc: "healthy server staying healthy (StatusPermanentRedirect)", + startHealthy: true, + healthSequence: []int{http.StatusPermanentRedirect}, + expectedNumRemovedServers: 0, + expectedNumUpsertedServers: 0, + expectedGaugeValue: 1, + }, { desc: "healthy server becoming sick", startHealthy: true,