Added parsing of seconds millisecond for nginx timeouts*

This commit is contained in:
Vladimir Zhukov 2023-06-20 12:09:36 +03:00
parent b51334d19b
commit 5a354bf4dc
14 changed files with 60375 additions and 107 deletions

View file

@ -74,9 +74,9 @@ You can add these Kubernetes annotations to specific Ingress objects to customiz
|[nginx.ingress.kubernetes.io/proxy-body-size](#custom-max-body-size)|string| |[nginx.ingress.kubernetes.io/proxy-body-size](#custom-max-body-size)|string|
|[nginx.ingress.kubernetes.io/proxy-cookie-domain](#proxy-cookie-domain)|string| |[nginx.ingress.kubernetes.io/proxy-cookie-domain](#proxy-cookie-domain)|string|
|[nginx.ingress.kubernetes.io/proxy-cookie-path](#proxy-cookie-path)|string| |[nginx.ingress.kubernetes.io/proxy-cookie-path](#proxy-cookie-path)|string|
|[nginx.ingress.kubernetes.io/proxy-connect-timeout](#custom-timeouts)|number| |[nginx.ingress.kubernetes.io/proxy-connect-timeout](#custom-timeouts)|string "s" or "ms"|
|[nginx.ingress.kubernetes.io/proxy-send-timeout](#custom-timeouts)|number| |[nginx.ingress.kubernetes.io/proxy-send-timeout](#custom-timeouts)|string "s" or "ms"|
|[nginx.ingress.kubernetes.io/proxy-read-timeout](#custom-timeouts)|number| |[nginx.ingress.kubernetes.io/proxy-read-timeout](#custom-timeouts)|string "s" or "ms"|
|[nginx.ingress.kubernetes.io/proxy-next-upstream](#custom-timeouts)|string| |[nginx.ingress.kubernetes.io/proxy-next-upstream](#custom-timeouts)|string|
|[nginx.ingress.kubernetes.io/proxy-next-upstream-timeout](#custom-timeouts)|number| |[nginx.ingress.kubernetes.io/proxy-next-upstream-timeout](#custom-timeouts)|number|
|[nginx.ingress.kubernetes.io/proxy-next-upstream-tries](#custom-timeouts)|number| |[nginx.ingress.kubernetes.io/proxy-next-upstream-tries](#custom-timeouts)|number|

View file

@ -181,9 +181,9 @@ The following table shows a configuration option's name, type, and the default v
|[location-snippet](#location-snippet)|string|""|| |[location-snippet](#location-snippet)|string|""||
|[custom-http-errors](#custom-http-errors)|[]int|[]int{}|| |[custom-http-errors](#custom-http-errors)|[]int|[]int{}||
|[proxy-body-size](#proxy-body-size)|string|"1m"|| |[proxy-body-size](#proxy-body-size)|string|"1m"||
|[proxy-connect-timeout](#proxy-connect-timeout)|int|5|| |[proxy-connect-timeout](#proxy-connect-timeout)|string|5s||
|[proxy-read-timeout](#proxy-read-timeout)|int|60|| |[proxy-read-timeout](#proxy-read-timeout)|string|60s||
|[proxy-send-timeout](#proxy-send-timeout)|int|60|| |[proxy-send-timeout](#proxy-send-timeout)|string|60s||
|[proxy-buffers-number](#proxy-buffers-number)|int|4|| |[proxy-buffers-number](#proxy-buffers-number)|int|4||
|[proxy-buffer-size](#proxy-buffer-size)|string|"4k"|| |[proxy-buffer-size](#proxy-buffer-size)|string|"4k"||
|[proxy-cookie-path](#proxy-cookie-path)|string|"off"|| |[proxy-cookie-path](#proxy-cookie-path)|string|"off"||

View file

@ -143,22 +143,20 @@ func (a ingAnnotations) parseInt(name string) (int, error) {
func (a ingAnnotations) parseTimeout(name string) (string, error) { func (a ingAnnotations) parseTimeout(name string) (string, error) {
val, ok := a[name] val, ok := a[name]
if ok { if ok {
setUnits, _ := regexp.Compile("(\\d+)(s|ms)$") s := normalizeString(val)
if len(s) == 0 {
if setUnits.MatchString(name) {
return name, nil
}
noUnits, _ := regexp.Compile("\\d+$")
if noUnits.MatchString(name) {
return fmt.Sprintf("%ss", name), nil
}
if name == "" {
return "0", errors.NewInvalidAnnotationContent(name, val) return "0", errors.NewInvalidAnnotationContent(name, val)
} }
setUnits, _ := regexp.Compile(`(\d+)(s|ms)?$`)
if setUnits.MatchString(s) {
return s, nil
}
noUnits, _ := regexp.Compile(`\d+$`)
if noUnits.MatchString(s) {
return fmt.Sprintf("%ss", s), nil
}
} }
return "0", errors.ErrMissingAnnotations return "0", errors.ErrMissingAnnotations
} }
@ -204,9 +202,8 @@ func GetIntAnnotation(name string, ing *networking.Ingress, fields AnnotationFie
} }
// GetTimeoutAnnotation extracts a string from an Ingress annotation, special format 10s // GetTimeoutAnnotation extracts a string from an Ingress annotation, special format 10s
func GetTimeoutAnnotation(name string, ing *networking.Ingress) (string, error) { func GetTimeoutAnnotation(name string, ing *networking.Ingress, fields AnnotationFields) (string, error) {
v := GetAnnotationWithPrefix(name) v, err := checkAnnotation(name, ing, fields)
err := checkAnnotation(v, ing)
if err != nil { if err != nil {
return "", err return "", err
} }

View file

@ -265,20 +265,17 @@ func (a proxy) Parse(ing *networking.Ingress) (interface{}, error) {
var err error var err error
config.ConnectTimeout, err = parser.GetIntAnnotation(proxyConnectTimeoutAnnotation, ing, a.annotationConfig.Annotations) config.ConnectTimeout, err = parser.GetTimeoutAnnotation(proxyConnectTimeoutAnnotation, ing, a.annotationConfig.Annotations)
if err != nil { if err != nil {
config.ConnectTimeout = defBackend.ProxyConnectTimeout config.ConnectTimeout = defBackend.ProxyConnectTimeout
} }
config.SendTimeout, err = parser.GetTimeoutAnnotation(proxySendTimeoutAnnotation, ing, a.annotationConfig.Annotations)
config.SendTimeout, err = parser.GetIntAnnotation(proxySendTimeoutAnnotation, ing, a.annotationConfig.Annotations)
if err != nil { if err != nil {
config.SendTimeout = defBackend.ProxySendTimeout config.SendTimeout = defBackend.ProxySendTimeout
} }
config.ReadTimeout, err = parser.GetIntAnnotation(proxyReadTimeoutAnnotation, ing, a.annotationConfig.Annotations) config.ReadTimeout, err = parser.GetTimeoutAnnotation(proxyReadTimeoutAnnotation, ing, a.annotationConfig.Annotations)
if err != nil { if err != nil {
config.ReadTimeout = defBackend.ProxyReadTimeout config.ReadTimeout = defBackend.ProxyReadTimeout

View file

@ -83,9 +83,9 @@ type mockBackend struct {
func (m mockBackend) GetDefaultBackend() defaults.Backend { func (m mockBackend) GetDefaultBackend() defaults.Backend {
return defaults.Backend{ return defaults.Backend{
ProxyConnectTimeout: 10, ProxyConnectTimeout: "10s",
ProxySendTimeout: 15, ProxySendTimeout: "15s",
ProxyReadTimeout: 20, ProxyReadTimeout: "20s",
ProxyBuffersNumber: 4, ProxyBuffersNumber: 4,
ProxyBufferSize: "10k", ProxyBufferSize: "10k",
ProxyBodySize: "3k", ProxyBodySize: "3k",
@ -104,8 +104,8 @@ func TestProxy(t *testing.T) {
data := map[string]string{} data := map[string]string{}
data[parser.GetAnnotationWithPrefix("proxy-connect-timeout")] = "1" data[parser.GetAnnotationWithPrefix("proxy-connect-timeout")] = "1"
data[parser.GetAnnotationWithPrefix("proxy-send-timeout")] = "2" data[parser.GetAnnotationWithPrefix("proxy-send-timeout")] = "15s"
data[parser.GetAnnotationWithPrefix("proxy-read-timeout")] = "3" data[parser.GetAnnotationWithPrefix("proxy-read-timeout")] = "20s"
data[parser.GetAnnotationWithPrefix("proxy-buffers-number")] = "8" data[parser.GetAnnotationWithPrefix("proxy-buffers-number")] = "8"
data[parser.GetAnnotationWithPrefix("proxy-buffer-size")] = "1k" data[parser.GetAnnotationWithPrefix("proxy-buffer-size")] = "1k"
data[parser.GetAnnotationWithPrefix("proxy-body-size")] = "2k" data[parser.GetAnnotationWithPrefix("proxy-body-size")] = "2k"
@ -126,14 +126,14 @@ func TestProxy(t *testing.T) {
if !ok { if !ok {
t.Fatalf("expected a Config type") t.Fatalf("expected a Config type")
} }
if p.ConnectTimeout != 1 { if p.ConnectTimeout != "1" {
t.Errorf("expected 1 as connect-timeout but returned %v", p.ConnectTimeout) t.Errorf("expected 1 as connect-timeout but returned %v", p.ConnectTimeout)
} }
if p.SendTimeout != 2 { if p.SendTimeout != "15s" {
t.Errorf("expected 2 as send-timeout but returned %v", p.SendTimeout) t.Errorf("expected 15s as send-timeout but returned %v", p.SendTimeout)
} }
if p.ReadTimeout != 3 { if p.ReadTimeout != "20s" {
t.Errorf("expected 3 as read-timeout but returned %v", p.ReadTimeout) t.Errorf("expected 20s as read-timeout but returned %v", p.ReadTimeout)
} }
if p.BuffersNumber != 8 { if p.BuffersNumber != 8 {
t.Errorf("expected 8 as proxy-buffers-number but returned %v", p.BuffersNumber) t.Errorf("expected 8 as proxy-buffers-number but returned %v", p.BuffersNumber)
@ -172,8 +172,8 @@ func TestProxyComplex(t *testing.T) {
data := map[string]string{} data := map[string]string{}
data[parser.GetAnnotationWithPrefix("proxy-connect-timeout")] = "1" data[parser.GetAnnotationWithPrefix("proxy-connect-timeout")] = "1"
data[parser.GetAnnotationWithPrefix("proxy-send-timeout")] = "2" data[parser.GetAnnotationWithPrefix("proxy-send-timeout")] = "15s"
data[parser.GetAnnotationWithPrefix("proxy-read-timeout")] = "3" data[parser.GetAnnotationWithPrefix("proxy-read-timeout")] = "20s"
data[parser.GetAnnotationWithPrefix("proxy-buffers-number")] = "8" data[parser.GetAnnotationWithPrefix("proxy-buffers-number")] = "8"
data[parser.GetAnnotationWithPrefix("proxy-buffer-size")] = "1k" data[parser.GetAnnotationWithPrefix("proxy-buffer-size")] = "1k"
data[parser.GetAnnotationWithPrefix("proxy-body-size")] = "2k" data[parser.GetAnnotationWithPrefix("proxy-body-size")] = "2k"
@ -194,14 +194,14 @@ func TestProxyComplex(t *testing.T) {
if !ok { if !ok {
t.Fatalf("expected a Config type") t.Fatalf("expected a Config type")
} }
if p.ConnectTimeout != 1 { if p.ConnectTimeout != "1" {
t.Errorf("expected 1 as connect-timeout but returned %v", p.ConnectTimeout) t.Errorf("expected 1 as connect-timeout but returned %v", p.ConnectTimeout)
} }
if p.SendTimeout != 2 { if p.SendTimeout != "15s" {
t.Errorf("expected 2 as send-timeout but returned %v", p.SendTimeout) t.Errorf("expected 15s as send-timeout but returned %v", p.SendTimeout)
} }
if p.ReadTimeout != 3 { if p.ReadTimeout != "20s" {
t.Errorf("expected 3 as read-timeout but returned %v", p.ReadTimeout) t.Errorf("expected 20s as read-timeout but returned %v", p.ReadTimeout)
} }
if p.BuffersNumber != 8 { if p.BuffersNumber != 8 {
t.Errorf("expected 8 as proxy-buffers-number but returned %v", p.BuffersNumber) t.Errorf("expected 8 as proxy-buffers-number but returned %v", p.BuffersNumber)
@ -249,14 +249,14 @@ func TestProxyWithNoAnnotation(t *testing.T) {
if !ok { if !ok {
t.Fatalf("expected a Config type") t.Fatalf("expected a Config type")
} }
if p.ConnectTimeout != 10 { if p.ConnectTimeout != "10s" {
t.Errorf("expected 10 as connect-timeout but returned %v", p.ConnectTimeout) t.Errorf("expected 10s as connect-timeout but returned %v", p.ConnectTimeout)
} }
if p.SendTimeout != 15 { if p.SendTimeout != "15s" {
t.Errorf("expected 15 as send-timeout but returned %v", p.SendTimeout) t.Errorf("expected 15s as send-timeout but returned %v", p.SendTimeout)
} }
if p.ReadTimeout != 20 { if p.ReadTimeout != "20s" {
t.Errorf("expected 20 as read-timeout but returned %v", p.ReadTimeout) t.Errorf("expected 20s as read-timeout but returned %v", p.ReadTimeout)
} }
if p.BuffersNumber != 4 { if p.BuffersNumber != 4 {
t.Errorf("expected 4 as buffer-number but returned %v", p.BuffersNumber) t.Errorf("expected 4 as buffer-number but returned %v", p.BuffersNumber)

View file

@ -55,8 +55,8 @@ func TestProxyTimeoutParsing(t *testing.T) {
func TestMergeConfigMapToStruct(t *testing.T) { func TestMergeConfigMapToStruct(t *testing.T) {
conf := map[string]string{ conf := map[string]string{
"custom-http-errors": "300,400,demo", "custom-http-errors": "300,400,demo",
"proxy-read-timeout": "1", "proxy-read-timeout": "1s",
"proxy-send-timeout": "2", "proxy-send-timeout": "2s",
"skip-access-log-urls": "/log,/demo,/test", "skip-access-log-urls": "/log,/demo,/test",
"use-proxy-protocol": "true", "use-proxy-protocol": "true",
"disable-access-log": "true", "disable-access-log": "true",
@ -85,8 +85,8 @@ func TestMergeConfigMapToStruct(t *testing.T) {
def.AccessLogPath = "/var/log/test/access.log" def.AccessLogPath = "/var/log/test/access.log"
def.ErrorLogPath = "/var/log/test/error.log" def.ErrorLogPath = "/var/log/test/error.log"
def.SkipAccessLogURLs = []string{"/log", "/demo", "/test"} def.SkipAccessLogURLs = []string{"/log", "/demo", "/test"}
def.ProxyReadTimeout = 1 def.ProxyReadTimeout = "1s"
def.ProxySendTimeout = 2 def.ProxySendTimeout = "2s"
def.UseProxyProtocol = true def.UseProxyProtocol = true
def.GzipDisable = "msie6" def.GzipDisable = "msie6"
def.GzipLevel = 9 def.GzipLevel = 9

File diff suppressed because it is too large Load diff

View file

@ -115,9 +115,9 @@ var _ = framework.DescribeAnnotation("proxy-*", func() {
}) })
ginkgo.It("should set valid proxy timeouts", func() { ginkgo.It("should set valid proxy timeouts", func() {
proxyConnectTimeout := "50" proxyConnectTimeout := "5s"
proxySendTimeout := "20" proxySendTimeout := "60s"
proxyReadtimeout := "20" proxyReadtimeout := "60s"
annotations := make(map[string]string) annotations := make(map[string]string)
annotations["nginx.ingress.kubernetes.io/proxy-connect-timeout"] = proxyConnectTimeout annotations["nginx.ingress.kubernetes.io/proxy-connect-timeout"] = proxyConnectTimeout
@ -129,9 +129,9 @@ var _ = framework.DescribeAnnotation("proxy-*", func() {
f.WaitForNginxServer(host, f.WaitForNginxServer(host,
func(server string) bool { func(server string) bool {
return strings.Contains(server, fmt.Sprintf("proxy_connect_timeout %ss;", proxyConnectTimeout)) && return strings.Contains(server, fmt.Sprintf("proxy_connect_timeout %s;", proxyConnectTimeout)) &&
strings.Contains(server, fmt.Sprintf("proxy_send_timeout %ss;", proxySendTimeout)) && strings.Contains(server, fmt.Sprintf("proxy_send_timeout %s;", proxySendTimeout)) &&
strings.Contains(server, fmt.Sprintf("proxy_read_timeout %ss;", proxyReadtimeout)) strings.Contains(server, fmt.Sprintf("proxy_read_timeout %s;", proxyReadtimeout))
}) })
}) })
@ -150,9 +150,9 @@ var _ = framework.DescribeAnnotation("proxy-*", func() {
f.WaitForNginxServer(host, f.WaitForNginxServer(host,
func(server string) bool { func(server string) bool {
return !strings.Contains(server, fmt.Sprintf("proxy_connect_timeout %ss;", proxyConnectTimeout)) && return !strings.Contains(server, fmt.Sprintf("proxy_connect_timeout %s;", proxyConnectTimeout)) &&
!strings.Contains(server, fmt.Sprintf("proxy_send_timeout %ss;", proxySendTimeout)) && !strings.Contains(server, fmt.Sprintf("proxy_send_timeout %s;", proxySendTimeout)) &&
!strings.Contains(server, fmt.Sprintf("proxy_read_timeout %ss;", proxyReadtimeout)) !strings.Contains(server, fmt.Sprintf("proxy_read_timeout %s;", proxyReadtimeout))
}) })
}) })

View file

@ -41,7 +41,7 @@ var _ = framework.DescribeSetting("proxy-connect-timeout", func() {
proxyConnectTimeout := "50" proxyConnectTimeout := "50"
cm := make(map[string]string) cm := make(map[string]string)
cm["proxy-connect-timeout"] = proxyConnectTimeout cm["proxy-connect-timeout"] = fmt.Sprintf("%ss", proxyConnectTimeout)
f.SetNginxConfigMapData(cm) f.SetNginxConfigMapData(cm)
f.WaitForNginxServer(host, f.WaitForNginxServer(host,

View file

@ -41,7 +41,7 @@ var _ = framework.DescribeSetting("proxy-read-timeout", func() {
proxyReadtimeout := "20" proxyReadtimeout := "20"
cm := make(map[string]string) cm := make(map[string]string)
cm["proxy-read-timeout"] = proxyReadtimeout cm["proxy-read-timeout"] = fmt.Sprintf("%ss", proxyReadtimeout)
f.SetNginxConfigMapData(cm) f.SetNginxConfigMapData(cm)
f.WaitForNginxServer(host, f.WaitForNginxServer(host,

View file

@ -41,7 +41,7 @@ var _ = framework.DescribeSetting("proxy-send-timeout", func() {
proxySendTimeout := "20" proxySendTimeout := "20"
cm := make(map[string]string) cm := make(map[string]string)
cm["proxy-send-timeout"] = proxySendTimeout cm["proxy-send-timeout"] = fmt.Sprintf("%ss", proxySendTimeout)
f.SetNginxConfigMapData(cm) f.SetNginxConfigMapData(cm)
f.WaitForNginxServer(host, f.WaitForNginxServer(host,

View file

@ -285,9 +285,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -392,9 +392,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -470,9 +470,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -582,9 +582,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -660,9 +660,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -682,4 +682,4 @@
}], }],
"TCPBackends": [], "TCPBackends": [],
"UDPBackends": [] "UDPBackends": []
} }

View file

@ -285,9 +285,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -392,9 +392,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -470,9 +470,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -582,9 +582,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -631,9 +631,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1m", "bodySize": "1m",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off", "cookiePath": "off",
@ -648,7 +648,7 @@
"validationDepth": 0 "validationDepth": 0
}, },
"use-port-in-redirects": false, "use-port-in-redirects": false,
"configuration-snippet": "", "configuration-snippet": "",
"rateLimit": { "rateLimit": {
"connections": { "connections": {
"name": "", "name": "",
@ -682,4 +682,4 @@
}], }],
"TCPBackends": [], "TCPBackends": [],
"UDPBackends": [] "UDPBackends": []
} }

View file

@ -21,7 +21,7 @@
"name": "kubernetes-dashboard-m3qc0", "name": "kubernetes-dashboard-m3qc0",
"uid": "b9511631-5176-11e7-b3db-080027494b5d", "uid": "b9511631-5176-11e7-b3db-080027494b5d",
"resourceVersion": "3700964" "resourceVersion": "3700964"
} }
}], }],
"SessionAffinity": { "SessionAffinity": {
"name": "", "name": "",
@ -135,9 +135,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1g", "bodySize": "1g",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off" "cookiePath": "off"
@ -235,9 +235,9 @@
}, },
"proxy": { "proxy": {
"bodySize": "1g", "bodySize": "1g",
"connectTimeout": 5, "connectTimeout": "5s",
"sendTimeout": 60, "sendTimeout": "60s",
"readTimeout": 60, "readTimeout": "60s",
"bufferSize": "4k", "bufferSize": "4k",
"cookieDomain": "off", "cookieDomain": "off",
"cookiePath": "off" "cookiePath": "off"