settings/bind: allow specifying bind/client timeouts
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"os"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Bind struct {
|
||||
@@ -31,6 +32,37 @@ type Bind struct {
|
||||
TLSCertificate string `yaml:"tls-certificate"`
|
||||
// TLSPrivateKey Alternate to TLSAcmeAutoCert
|
||||
TLSPrivateKey string `yaml:"tls-key"`
|
||||
|
||||
// ReadTimeout is the maximum duration for reading the entire
|
||||
// request, including the body. A zero or negative value means
|
||||
// there will be no timeout.
|
||||
//
|
||||
// Because ReadTimeout does not let Handlers make per-request
|
||||
// decisions on each request body's acceptable deadline or
|
||||
// upload rate, most users will prefer to use
|
||||
// ReadHeaderTimeout. It is valid to use them both.
|
||||
ReadTimeout time.Duration `yaml:"read-timeout"`
|
||||
|
||||
// ReadHeaderTimeout is the amount of time allowed to read
|
||||
// request headers. The connection's read deadline is reset
|
||||
// after reading the headers and the Handler can decide what
|
||||
// is considered too slow for the body. If zero, the value of
|
||||
// ReadTimeout is used. If negative, or if zero and ReadTimeout
|
||||
// is zero or negative, there is no timeout.
|
||||
ReadHeaderTimeout time.Duration `yaml:"read-header-timeout"`
|
||||
|
||||
// WriteTimeout is the maximum duration before timing out
|
||||
// writes of the response. It is reset whenever a new
|
||||
// request's header is read. Like ReadTimeout, it does not
|
||||
// let Handlers make decisions on a per-request basis.
|
||||
// A zero or negative value means there will be no timeout.
|
||||
WriteTimeout time.Duration `yaml:"write-timeout"`
|
||||
|
||||
// IdleTimeout is the maximum amount of time to wait for the
|
||||
// next request when keep-alives are enabled. If zero, the value
|
||||
// of ReadTimeout is used. If negative, or if zero and ReadTimeout
|
||||
// is zero or negative, there is no timeout.
|
||||
IdleTimeout time.Duration `yaml:"idle-timeout"`
|
||||
}
|
||||
|
||||
func (b *Bind) Listener() (net.Listener, string) {
|
||||
@@ -83,6 +115,11 @@ func (b *Bind) Server(backends map[string]http.Handler, acmeCachePath string) (*
|
||||
}
|
||||
}), tlsConfig)
|
||||
|
||||
server.ReadTimeout = b.ReadTimeout
|
||||
server.ReadHeaderTimeout = b.ReadHeaderTimeout
|
||||
server.WriteTimeout = b.WriteTimeout
|
||||
server.IdleTimeout = b.IdleTimeout
|
||||
|
||||
swap := func(handler http.Handler) {
|
||||
serverHandler.Store(&handler)
|
||||
}
|
||||
|
Reference in New Issue
Block a user