@marcel91200 / caddy Mirror · read-only / commits / eda9a1b3
Fork 0

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 }