-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathboilerplate.vcl
More file actions
132 lines (102 loc) · 2.9 KB
/
boilerplate.vcl
File metadata and controls
132 lines (102 loc) · 2.9 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#
# Fastly (Varnish) configuration for ...
#
# Service: ..., v #...
#
# Backend configs:
# - Max connections: 700
# - Error treshold: 5
# - Connection (ms): 60000
# - First byte (ms): 60000
# - Between bytes (ms): 30000
#
# Assuming it is using Varnish 2.1.5 syntax
#
# Ref:
# - https://www.varnish-cache.org/docs/2.1/tutorial/vcl.html
# - https://www.varnish-software.com/static/book/VCL_functions.html
# - http://docs.fastly.com/guides/22958207/27123847
# - http://docs.fastly.com/guides/22958207/23206371
# - https://www.varnish-cache.org/docs/2.1/tutorial/increasing_your_hitrate.html
# - https://fastly.zendesk.com/entries/23206371
#
# Doc: Called at the beginning of a request, after the complete request
# has been received and parsed. Its purpose is to
# decide whether or not to serve the request, how to
# do it, and, if applicable, which backend to use.
sub vcl_recv {
#FASTLY recv
## Fastly BOILERPLATE ========
if (req.request != "HEAD" && req.request != "GET" && req.request != "PURGE") {
return(pass);
}
return(lookup);
## /Fastly BOILERPLATE =======
}
# Doc: Called after a document has been successfully retrieved from the backend
sub vcl_fetch {
#FASTLY fetch
## Fastly BOILERPLATE ========
if ((beresp.status == 500 || beresp.status == 503) && req.restarts < 1 && (req.request == "GET" || req.request == "HEAD")) {
restart;
}
if(req.restarts > 0 ) {
set beresp.http.Fastly-Restarts = req.restarts;
}
if (beresp.http.Set-Cookie) {
set req.http.Fastly-Cachetype = "SETCOOKIE";
return (pass);
}
if (beresp.http.Cache-Control ~ "private") {
set req.http.Fastly-Cachetype = "PRIVATE";
return (pass);
}
if (beresp.status == 500 || beresp.status == 503) {
set req.http.Fastly-Cachetype = "ERROR";
set beresp.ttl = 1s;
set beresp.grace = 5s;
return (deliver);
}
if (beresp.http.Expires || beresp.http.Surrogate-Control ~ "max-age" || beresp.http.Cache-Control ~"(s-maxage|max-age)") {
# keep the ttl here
} else {
# apply the default ttl
set beresp.ttl = 3600s;
}
return(deliver);
## /Fastly BOILERPLATE =======
}
# Doc: Called after a cache lookup if the requested document was found in the cache.
sub vcl_hit {
#FASTLY hit
## Fastly BOILERPLATE ========
if (!obj.cacheable) {
return(pass);
}
return(deliver);
## /Fastly BOILERPLATE =======
}
sub vcl_miss {
#FASTLY miss
## Fastly BOILERPLATE ========
return(fetch);
## /Fastly BOILERPLATE =======
}
sub vcl_deliver {
#FASTLY deliver
# Debug, Advise backend
set resp.http.X-Backend-Key = req.backend;
# Debug, what URL was requested
set resp.http.X-Request-Url = req.url;
# Debug, change version string
set resp.http.X-Config-Serial = "2014012300";
## Fastly BOILERPLATE ========
return(deliver);
## /Fastly BOILERPLATE =======
}
sub vcl_error {
#FASTLY error
}
sub vcl_pass {
#FASTLY pass
}