From f20f490c15aacb94b3901ea2582f1d8cc582c46f Mon Sep 17 00:00:00 2001 From: eleksir Date: Sat, 4 Apr 2026 16:17:21 +0300 Subject: [PATCH] Disable keepalive connections and set idle timeout to 10 seconds, explicitly --- internal/backer/consts.go | 3 +++ internal/backer/newServer.go | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/backer/consts.go b/internal/backer/consts.go index fb31111..2233866 100644 --- a/internal/backer/consts.go +++ b/internal/backer/consts.go @@ -14,6 +14,9 @@ const ( // maxHeaderBytes is the maximum size of request headers (1KB). maxHeaderBytes = 1024 + // idleTimeout is the maximum time to wait for the next request on keep-alive connections. + idleTimeout = 10 * time.Second + // portMin is the minimum valid port number. portMin = 1 diff --git a/internal/backer/newServer.go b/internal/backer/newServer.go index 549a377..481094c 100644 --- a/internal/backer/newServer.go +++ b/internal/backer/newServer.go @@ -178,31 +178,39 @@ func NewServer(configPath string) (*ServerWrapper, error) { // HTTP mode if nohttps is enabled in config. // HTTPS mode if nohttps is disabled in config. if C.NoHTTPS { - return &ServerWrapper{ + srv := &ServerWrapper{ Server: &http.Server{ Addr: fmt.Sprintf("%s:%d", C.Address, C.Port), Handler: withServerHeader(mux), ReadHeaderTimeout: readHeaderTimeout, WriteTimeout: time.Duration(C.BackupTimeout) * time.Minute, + IdleTimeout: idleTimeout, MaxHeaderBytes: maxHeaderBytes, ErrorLog: log.DebugLogger(), }, - }, nil + } + srv.SetKeepAlivesEnabled(false) + + return srv, nil } - return &ServerWrapper{ + srv := &ServerWrapper{ Server: &http.Server{ Addr: fmt.Sprintf("%s:%d", C.Address, C.Port), Handler: withServerHeader(mux), ReadHeaderTimeout: readHeaderTimeout, WriteTimeout: time.Duration(C.BackupTimeout) * time.Minute, + IdleTimeout: idleTimeout, MaxHeaderBytes: maxHeaderBytes, TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS13, }, ErrorLog: log.DebugLogger(), }, - }, nil + } + srv.SetKeepAlivesEnabled(false) + + return srv, nil } // writeWithContext checks if context is canceled before executing fn.