diff --git a/cmd/gateway-anonymous.go b/cmd/gateway-anonymous.go index fd940fd94..2c1a975b2 100644 --- a/cmd/gateway-anonymous.go +++ b/cmd/gateway-anonymous.go @@ -16,7 +16,12 @@ package cmd -import "net/http" +import ( + "crypto/tls" + "net" + "net/http" + "time" +) func anonErrToObjectErr(statusCode int, params ...string) error { bucket := "" @@ -47,3 +52,23 @@ func anonErrToObjectErr(statusCode int, params ...string) error { return errUnexpected } + +// newCustomHTTPTransport returns a new http configuration +// used while communicating with the cloud backends. +// This sets the value for MaxIdleConns from 2 (go default) to +// 100. +func newCustomHTTPTransport() http.RoundTripper { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + TLSClientConfig: &tls.Config{RootCAs: globalRootCAs}, + DisableCompression: true, + } +} diff --git a/cmd/gateway-azure.go b/cmd/gateway-azure.go index b62fc3c1c..217a94aa6 100644 --- a/cmd/gateway-azure.go +++ b/cmd/gateway-azure.go @@ -179,6 +179,7 @@ func newAzureLayer(host string) (GatewayLayer, error) { if err != nil { return &azureObjects{}, err } + c.HTTPClient.Transport = newCustomHTTPTransport() return &azureObjects{ client: c.GetBlobService(), diff --git a/cmd/gateway-gcs.go b/cmd/gateway-gcs.go index 7ebae3a9d..05562e37b 100644 --- a/cmd/gateway-gcs.go +++ b/cmd/gateway-gcs.go @@ -277,6 +277,7 @@ func newGCSGateway(projectID string) (GatewayLayer, error) { if err != nil { return nil, err } + anonClient.SetCustomTransport(newCustomHTTPTransport()) gateway := &gcsGateway{ client: client, diff --git a/cmd/gateway-s3.go b/cmd/gateway-s3.go index dbace5295..41ebcc7dc 100644 --- a/cmd/gateway-s3.go +++ b/cmd/gateway-s3.go @@ -130,6 +130,7 @@ func newS3Gateway(host string) (GatewayLayer, error) { if err != nil { return nil, err } + anonClient.SetCustomTransport(newCustomHTTPTransport()) return &s3Objects{ Client: client,