summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Lavoie <lavofr@gmail.com>2020-10-30 14:05:21 -0400
committerGitHub <noreply@github.com>2020-10-30 12:05:21 -0600
commitb66099379d065ec3340cbe147f65dcf0a39e8e52 (patch)
treef1625b31777c34c7be5afb743a412db1c0dc5381
parentc9fdff9976da38c650a51cd3fb4f2667853ff627 (diff)
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.go28
-rw-r--r--modules/caddyhttp/reverseproxy/httptransport.go4
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 9f3bc93..423bd8f 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 193487a..7fa118c 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 dce7b9e..d2a9951 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,