diff options
author | Francis Lavoie <[email protected]> | 2020-10-30 14:05:21 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2020-10-30 12:05:21 -0600 |
commit | b66099379d065ec3340cbe147f65dcf0a39e8e52 (patch) | |
tree | f1625b31777c34c7be5afb743a412db1c0dc5381 | |
parent | c9fdff9976da38c650a51cd3fb4f2667853ff627 (diff) | |
download | caddy-b66099379d065ec3340cbe147f65dcf0a39e8e52.tar.gz caddy-b66099379d065ec3340cbe147f65dcf0a39e8e52.zip |
reverseproxy: Add max_idle_conns_per_host; fix godocs (#3829)
-rw-r--r-- | caddytest/integration/caddyfile_adapt/reverse_proxy_options.txt (renamed from caddytest/integration/caddyfile_adapt/reverse_proxy_h2c.txt) | 8 | ||||
-rw-r--r-- | modules/caddyhttp/reverseproxy/caddyfile.go | 28 | ||||
-rw-r--r-- | modules/caddyhttp/reverseproxy/httptransport.go | 4 |
3 files changed, 38 insertions, 2 deletions
diff --git a/caddytest/integration/caddyfile_adapt/reverse_proxy_h2c.txt b/caddytest/integration/caddyfile_adapt/reverse_proxy_options.txt index 9f3bc93f4..423bd8fdb 100644 --- a/caddytest/integration/caddyfile_adapt/reverse_proxy_h2c.txt +++ b/caddytest/integration/caddyfile_adapt/reverse_proxy_options.txt @@ -6,11 +6,15 @@ https://example.com { header_up X-Forwarded-For {remote} header_up X-Forwarded-Port {server_port} header_up X-Forwarded-Proto "http" + + buffer_requests + transport http { versions h2c 2 compression off + max_conns_per_host 5 + max_idle_conns_per_host 2 } - buffer_requests } } @@ -64,6 +68,8 @@ https://example.com { }, "transport": { "compression": false, + "max_conns_per_host": 5, + "max_idle_conns_per_host": 2, "protocol": "http", "versions": [ "h2c", diff --git a/modules/caddyhttp/reverseproxy/caddyfile.go b/modules/caddyhttp/reverseproxy/caddyfile.go index 193487a04..7fa118c2a 100644 --- a/modules/caddyhttp/reverseproxy/caddyfile.go +++ b/modules/caddyhttp/reverseproxy/caddyfile.go @@ -72,6 +72,7 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) // // # streaming // flush_interval <duration> +// buffer_requests // // # header manipulation // header_up [+|-]<field> [<value|regexp> [<replacement>]] @@ -588,13 +589,18 @@ func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { // read_buffer <size> // write_buffer <size> // dial_timeout <duration> -// tls_client_auth <cert_file> <key_file> +// tls +// tls_client_auth <automate_name> | <cert_file> <key_file> // tls_insecure_skip_verify // tls_timeout <duration> // tls_trusted_ca_certs <cert_files...> +// tls_server_name <sni> // keepalive [off|<duration>] // keepalive_idle_conns <max_count> // versions <versions...> +// compression off +// max_conns_per_host <count> +// max_idle_conns_per_host <count> // } // func (h *HTTPTransport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { @@ -738,6 +744,26 @@ func (h *HTTPTransport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { } } + case "max_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.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 dce7b9e87..d2a995166 100644 --- a/modules/caddyhttp/reverseproxy/httptransport.go +++ b/modules/caddyhttp/reverseproxy/httptransport.go @@ -62,6 +62,9 @@ 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"` @@ -193,6 +196,7 @@ 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, |