Browse Source

caddyhttp: New idle_timeout default of 5m

master
Matthew Holt 4 years ago
parent
commit
1438e4dbc8
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 13
      modules/caddyhttp/app.go
  2. 4
      modules/caddyhttp/server.go

13
modules/caddyhttp/app.go

@ -250,6 +250,13 @@ func (app *App) Provision(ctx caddy.Context) error {
if err != nil { if err != nil {
return fmt.Errorf("server %s: setting up TLS connection policies: %v", srvName, err) return fmt.Errorf("server %s: setting up TLS connection policies: %v", srvName, err)
} }
// if there is no idle timeout, set a sane default; users have complained
// before that aggressive CDNs leave connections open until the server
// closes them, so if we don't close them it leads to resource exhaustion
if srv.IdleTimeout == 0 {
srv.IdleTimeout = defaultIdleTimeout
}
} }
return nil return nil
@ -458,6 +465,12 @@ func (app *App) httpsPort() int {
return app.HTTPSPort return app.HTTPSPort
} }
// defaultIdleTimeout is the default HTTP server timeout
// for closing idle connections; useful to avoid resource
// exhaustion behind hungry CDNs, for example (we've had
// several complaints without this).
const defaultIdleTimeout = caddy.Duration(5 * time.Minute)
// Interface guards // Interface guards
var ( var (
_ caddy.App = (*App)(nil) _ caddy.App = (*App)(nil)

4
modules/caddyhttp/server.go

@ -59,8 +59,8 @@ type Server struct {
WriteTimeout caddy.Duration `json:"write_timeout,omitempty"` WriteTimeout caddy.Duration `json:"write_timeout,omitempty"`
// IdleTimeout is the maximum time to wait for the next request // IdleTimeout is the maximum time to wait for the next request
// when keep-alives are enabled. If zero, ReadTimeout is used. // when keep-alives are enabled. If zero, a default timeout of
// If both are zero, there is no timeout. // 5m is applied to help avoid resource exhaustion.
IdleTimeout caddy.Duration `json:"idle_timeout,omitempty"` IdleTimeout caddy.Duration `json:"idle_timeout,omitempty"`
// MaxHeaderBytes is the maximum size to parse from a client's // MaxHeaderBytes is the maximum size to parse from a client's

Loading…
Cancel
Save