Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Mirrored from https://github.com/Slazee/caddy.git
Synced Nov 14, 05:15 UTC
fastcgi: Add timeouts support to Caddyfile adapter (#3842)
* fastcgi: Add timeouts support to Caddyfile adapter * fastcgi: Use tabs instead of spaces
Francis Lavoie committed
Nov 2, 2020 at 17:11 UTC
eda9a1b377effed349f2e818a3ce71c3c8df6173
2 files changed
+88
-10
caddytest/integration/caddyfile_adapt/php_fastcgi_index_off.txt
+16
-10
@@ -1,15 +1,18 @@
1
:8884
2
3
php_fastcgi localhost:9000 {
4
- # some php_fastcgi-specific subdirectives
5
- split .php .php5
6
- env VAR1 value1
7
- env VAR2 value2
8
- root /var/www
9
- index off
4
+ # some php_fastcgi-specific subdirectives
5
+ split .php .php5
6
+ env VAR1 value1
7
+ env VAR2 value2
8
+ root /var/www
9
+ index off
10
+ dial_timeout 3s
11
+ read_timeout 10s
12
+ write_timeout 20s
13
11
- # passed through to reverse_proxy (directive order doesn't matter!)
12
- lb_policy random
14
+ # passed through to reverse_proxy (directive order doesn't matter!)
15
+ lb_policy random
16
}
17
----------
18
{
@@ -39,16 +42,19 @@ php_fastcgi localhost:9000 {
42
}
43
},
44
"transport": {
45
+ "dial_timeout": 3000000000,
46
"env": {
47
"VAR1": "value1",
48
"VAR2": "value2"
49
},
50
"protocol": "fastcgi",
51
+ "read_timeout": 10000000000,
52
"root": "/var/www",
53
"split_path": [
54
".php",
55
".php5"
51
- ]
56
+ ],
57
+ "write_timeout": 20000000000
58
},
59
"upstreams": [
60
{
@@ -63,4 +69,4 @@ php_fastcgi localhost:9000 {
69
}
70
}
71
}
66
-}
\ No newline at end of file
72
+}
modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
+72
@@ -40,6 +40,9 @@ func init() {
40
// split <at>
41
// env <key> <value>
42
// resolve_root_symlink
43
+// dial_timeout <duration>
44
+// read_timeout <duration>
45
+// write_timeout <duration>
46
// }
47
//
48
func (t *Transport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
@@ -69,8 +72,41 @@ func (t *Transport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
72
t.EnvVars[args[0]] = args[1]
73
74
case "resolve_root_symlink":
75
+ if d.NextArg() {
76
+ return d.ArgErr()
77
+ }
78
t.ResolveRootSymlink = true
79
80
+ case "dial_timeout":
81
+ if !d.NextArg() {
82
+ return d.ArgErr()
83
+ }
84
+ dur, err := caddy.ParseDuration(d.Val())
85
+ if err != nil {
86
+ return d.Errf("bad timeout value %s: %v", d.Val(), err)
87
+ }
88
+ t.DialTimeout = caddy.Duration(dur)
89
+
90
+ case "read_timeout":
91
+ if !d.NextArg() {
92
+ return d.ArgErr()
93
+ }
94
+ dur, err := caddy.ParseDuration(d.Val())
95
+ if err != nil {
96
+ return d.Errf("bad timeout value %s: %v", d.Val(), err)
97
+ }
98
+ t.ReadTimeout = caddy.Duration(dur)
99
+
100
+ case "write_timeout":
101
+ if !d.NextArg() {
102
+ return d.ArgErr()
103
+ }
104
+ dur, err := caddy.ParseDuration(d.Val())
105
+ if err != nil {
106
+ return d.Errf("bad timeout value %s: %v", d.Val(), err)
107
+ }
108
+ t.WriteTimeout = caddy.Duration(dur)
109
+
110
default:
111
return d.Errf("unrecognized subdirective %s", d.Val())
112
}
@@ -208,6 +244,42 @@ func parsePHPFastCGI(h httpcaddyfile.Helper) ([]httpcaddyfile.ConfigValue, error
244
dispenser.Delete()
245
}
246
fcgiTransport.ResolveRootSymlink = true
247
+
248
+ case "dial_timeout":
249
+ if !dispenser.NextArg() {
250
+ return nil, dispenser.ArgErr()
251
+ }
252
+ dur, err := caddy.ParseDuration(dispenser.Val())
253
+ if err != nil {
254
+ return nil, dispenser.Errf("bad timeout value %s: %v", dispenser.Val(), err)
255
+ }
256
+ fcgiTransport.DialTimeout = caddy.Duration(dur)
257
+ dispenser.Delete()
258
+ dispenser.Delete()
259
+
260
+ case "read_timeout":
261
+ if !dispenser.NextArg() {
262
+ return nil, dispenser.ArgErr()
263
+ }
264
+ dur, err := caddy.ParseDuration(dispenser.Val())
265
+ if err != nil {
266
+ return nil, dispenser.Errf("bad timeout value %s: %v", dispenser.Val(), err)
267
+ }
268
+ fcgiTransport.ReadTimeout = caddy.Duration(dur)
269
+ dispenser.Delete()
270
+ dispenser.Delete()
271
+
272
+ case "write_timeout":
273
+ if !dispenser.NextArg() {
274
+ return nil, dispenser.ArgErr()
275
+ }
276
+ dur, err := caddy.ParseDuration(dispenser.Val())
277
+ if err != nil {
278
+ return nil, dispenser.Errf("bad timeout value %s: %v", dispenser.Val(), err)
279
+ }
280
+ fcgiTransport.WriteTimeout = caddy.Duration(dur)
281
+ dispenser.Delete()
282
+ dispenser.Delete()
283
}
284
}
285
}