aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMatthew Holt <[email protected]>2021-06-15 14:54:48 -0600
committerMatthew Holt <[email protected]>2021-06-15 14:54:48 -0600
commit7c68809f4e13a7ac7c9e216a69410e7c1966c1df (patch)
treec325d21c07f3de71c67f445b1c1be91fc4ce3ae3
parent6d25261c2227eb040658a710ebe1f6cfd550bcab (diff)
downloadcaddy-7c68809f4e13a7ac7c9e216a69410e7c1966c1df.tar.gz
caddy-7c68809f4e13a7ac7c9e216a69410e7c1966c1df.zip
reverseproxy: Fix overwriting of max_idle_conns_per_host (closes #4201)
Also split the Caddyfile subdirective keepalive_idle_conns into two properties so the conns and conns_per_host can be set separately. This is technically a breaking change, but probably anyone who this breaks already had a broken config anyway, and silently fixing it won't help them fix their configs.
-rw-r--r--modules/caddyhttp/reverseproxy/caddyfile.go22
-rw-r--r--modules/caddyhttp/reverseproxy/httptransport.go10
-rw-r--r--modules/caddyhttp/reverseproxy/reverseproxy.go2
3 files changed, 16 insertions, 18 deletions
diff --git a/modules/caddyhttp/reverseproxy/caddyfile.go b/modules/caddyhttp/reverseproxy/caddyfile.go
index 61eac7ed8..8bbdf5e86 100644
--- a/modules/caddyhttp/reverseproxy/caddyfile.go
+++ b/modules/caddyhttp/reverseproxy/caddyfile.go
@@ -978,6 +978,18 @@ func (h *HTTPTransport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
h.KeepAlive = new(KeepAlive)
}
h.KeepAlive.MaxIdleConns = num
+
+ case "keepalive_idle_conns_per_host":
+ if !d.NextArg() {
+ return d.ArgErr()
+ }
+ num, err := strconv.Atoi(d.Val())
+ if err != nil {
+ return d.Errf("bad integer value '%s': %v", d.Val(), err)
+ }
+ if h.KeepAlive == nil {
+ h.KeepAlive = new(KeepAlive)
+ }
h.KeepAlive.MaxIdleConnsPerHost = num
case "versions":
@@ -1004,16 +1016,6 @@ func (h *HTTPTransport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
}
h.MaxConnsPerHost = num
- case "max_idle_conns_per_host":
- if !d.NextArg() {
- return d.ArgErr()
- }
- num, err := strconv.Atoi(d.Val())
- if err != nil {
- return d.Errf("bad integer value '%s': %v", d.Val(), err)
- }
- h.MaxIdleConnsPerHost = num
-
default:
return d.Errf("unrecognized subdirective %s", d.Val())
}
diff --git a/modules/caddyhttp/reverseproxy/httptransport.go b/modules/caddyhttp/reverseproxy/httptransport.go
index fdaf56e1d..f217a4bac 100644
--- a/modules/caddyhttp/reverseproxy/httptransport.go
+++ b/modules/caddyhttp/reverseproxy/httptransport.go
@@ -62,9 +62,6 @@ type HTTPTransport struct {
// Maximum number of connections per host. Default: 0 (no limit)
MaxConnsPerHost int `json:"max_conns_per_host,omitempty"`
- // Maximum number of idle connections per host. Default: 0 (uses Go's default of 2)
- MaxIdleConnsPerHost int `json:"max_idle_conns_per_host,omitempty"`
-
// How long to wait before timing out trying to connect to
// an upstream.
DialTimeout caddy.Duration `json:"dial_timeout,omitempty"`
@@ -197,7 +194,6 @@ func (h *HTTPTransport) NewTransport(ctx caddy.Context) (*http.Transport, error)
return conn, nil
},
MaxConnsPerHost: h.MaxConnsPerHost,
- MaxIdleConnsPerHost: h.MaxIdleConnsPerHost,
ResponseHeaderTimeout: time.Duration(h.ResponseHeaderTimeout),
ExpectContinueTimeout: time.Duration(h.ExpectContinueTimeout),
MaxResponseHeaderBytes: h.MaxResponseHeaderSize,
@@ -412,13 +408,13 @@ type KeepAlive struct {
// How often to probe for liveness.
ProbeInterval caddy.Duration `json:"probe_interval,omitempty"`
- // Maximum number of idle connections.
+ // Maximum number of idle connections. Default: 0, which means no limit.
MaxIdleConns int `json:"max_idle_conns,omitempty"`
- // Maximum number of idle connections per upstream host.
+ // Maximum number of idle connections per host. Default: 0, which uses Go's default of 2.
MaxIdleConnsPerHost int `json:"max_idle_conns_per_host,omitempty"`
- // How long connections should be kept alive when idle.
+ // How long connections should be kept alive when idle. Default: 0, which means no timeout.
IdleConnTimeout caddy.Duration `json:"idle_timeout,omitempty"`
}
diff --git a/modules/caddyhttp/reverseproxy/reverseproxy.go b/modules/caddyhttp/reverseproxy/reverseproxy.go
index dbbf64718..6b217e1ae 100644
--- a/modules/caddyhttp/reverseproxy/reverseproxy.go
+++ b/modules/caddyhttp/reverseproxy/reverseproxy.go
@@ -204,7 +204,7 @@ func (h *Handler) Provision(ctx caddy.Context) error {
KeepAlive: &KeepAlive{
ProbeInterval: caddy.Duration(30 * time.Second),
IdleConnTimeout: caddy.Duration(2 * time.Minute),
- MaxIdleConnsPerHost: 32,
+ MaxIdleConnsPerHost: 32, // seems about optimal, see #2805
},
DialTimeout: caddy.Duration(10 * time.Second),
}