-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample.vcl
59 lines (47 loc) · 1.11 KB
/
example.vcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import backendhealth;
backend b1 {
.host = "127.0.0.1";
.port = "8081";
.probe = { .initial = 0; }
}
backend b2 {
.host = "127.0.0.1";
.port = "8082";
.probe = { .initial = 0; }
}
backend b3 {
.host = "127.0.0.1";
.port = "8080";
.probe = { .initial = 0; }
}
director foo round-robin {
{ .backend = b1; }
{ .backend = b2; }
{ .backend = b3; }
}
acl localhost {
"localhost";
}
sub vcl_recv {
set req.backend = foo;
if (req.url ~ "/backend_health" && client.ip ~ localhost) {
error 777 "OK";
}
}
sub vcl_error {
if (obj.status == 777) {
set obj.status = 200;
# JSONP
if (req.url ~ "\?callback=\w+") {
set req.http.cb = regsub(req.url, ".*\?callback=(\w+).*", "\1");
set obj.http.Content-Type = "application/javascript";
synthetic req.http.cb + {"("} + backendhealth.json(false) + {")"};
}
# JSON
else {
set obj.http.Content-Type = "application/json";
synthetic backendhealth.json(true);
}
return (deliver);
}
}