Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
%23%20Please%20set%20the%20following%20variables%20inside%0A%23%20this%20varnish%20config%20or%20through%20the%20Fastly%0A%23%20control%20panel%0A%23%0A%23%20backend%20F_aws_bucket%0A%23%20backend%20F_api%0A%0Asub%20vcl_recv%20%7B%0A%23FASTLY%20recv%0A%0A%20%20%23%20redirect%20any%20crawlers%20directly%20to%20the%20Ruby%20API%0A%20%20%23%20so%20that%20we%20can%20serve%20metatags%20to%20them%0A%20%20if%20(req.url%20~%20%22_escaped_fragment_%22%20%7C%7C%20req.http.user-agent%20~%20%22baiduspider%7Ctwitterbot%7Cfacebookexternalhit%7Crogerbot%7Clinkedinbot%7Cembedly%7Cquora%20link%20preview%7Cshowyoubot%7Coutbrain%7Cpinterest%7Cslackbot%7CvkShare%7CW3C_Validator%7Credditbot%7CSlackbot-LinkExpanding%22)%20%7B%0A%20%20%20%20set%20req.backend%20%3D%20F_api%3B%0A%20%20%20%20%23%20set%20req.http.Host%20%3D%20F_api.host%3B%0A%20%20%20%20set%20req.http.X-Crawler%20%3D%20%22yes%22%3B%0A%20%20%7D%0A%0A%20%20%23%20enforce%20APEX%20domains%20to%20direct%20to%20%22www.%22%20instead%0A%20%20%23%20if%20not%20already%20%22www.%22%20or%20%22www-%22%0A%20%20if%20(req.http.host%20!~%20%22%5Ewww%5C..%2B%22%20%26%26%20req.http.host%20!~%20%22%5Ewww-.%2B%22)%20%7B%0A%20%20%20%20set%20req.http.host%20%3D%20%22www.%22%20req.http.host%3B%0A%20%20%20%20set%20req.http.X-Varnish-Redirect%20%3D%20%22https%3A%2F%2F%22%20req.http.host%20req.url%3B%0A%20%20%20%20error%20750%20req.http.X-Varnish-Redirect%3B%0A%20%20%7D%0A%0A%20%20%23%20force%20SSL%20redirects%20to%0A%20%20if%20(!req.http.Fastly-SSL)%20%7B%0A%20%20%20%20set%20req.http.X-Varnish-Redirect%20%3D%20%22https%3A%2F%2F%22%20req.http.host%20req.url%3B%0A%20%20%20%20error%20750%20req.http.X-Varnish-Redirect%3B%0A%20%20%7D%0A%0A%20%20%23%20if%20the%20request%20is%20normal%20(not%20a%20cralwer)%20and%0A%20%20%23%20is%20requesting%20something%20without%20an%20extension%0A%20%20%23%20we'll%20give%20them%20the%20%22%2Findex.html%22%20file%20instead%0A%20%20%23%20this%20is%20especially%20useful%20for%20single%20page%20apps%0A%20%20if%20(!req.http.X-Crawler%20%26%26%20req.url.ext%20%3D%3D%20%22%22)%20%7B%0A%20%20%20%20set%20req.url%20%3D%20%22%2Findex.html%22%3B%0A%20%20%7D%0A%0A%20%20if%20(req.request%20!%3D%20%22HEAD%22%20%26%26%20req.request%20!%3D%20%22GET%22%20%26%26%20req.request%20!%3D%20%22FASTLYPURGE%22)%20%7B%0A%20%20%20%20return(pass)%3B%0A%20%20%7D%0A%0A%20%20return(lookup)%3B%0A%7D%0A%0Asub%20vcl_fetch%20%7B%0A%23FASTLY%20fetch%0A%0A%20%20%23%20Lets%20serve%20everything%20as%20compressed%20so%20that%0A%20%20%23%20our%20load%20on%20the%20wire%20is%20small%0A%20%20if%20((beresp.status%20%3D%3D%20200%20%7C%7C%20beresp.status%20%3D%3D%20404)%20%26%26%20(beresp.http.content-type%20~%20%22%5E(text%5C%2Fhtml%7Capplication%5C%2Fx%5C-javascript%7Ctext%5C%2Fcss%7Capplication%5C%2Fjavascript%7Ctext%5C%2Fjavascript%7Capplication%5C%2Fjson%7Capplication%5C%2Fvnd%5C.ms%5C-fontobject%7Capplication%5C%2Fx%5C-font%5C-opentype%7Capplication%5C%2Fx%5C-font%5C-truetype%7Capplication%5C%2Fx%5C-font%5C-ttf%7Capplication%5C%2Fxml%7Cfont%5C%2Feot%7Cfont%5C%2Fopentype%7Cfont%5C%2Fotf%7Cimage%5C%2Fsvg%5C%2Bxml%7Cimage%5C%2Fvnd%5C.microsoft%5C.icon%7Ctext%5C%2Fplain%7Ctext%5C%2Fxml)%5Cs*(%24%7C%3B)%22%20%7C%7C%20req.url%20~%20%22%5C.(css%7Cjs%7Chtml%7Ceot%7Cico%7Cotf%7Cttf%7Cjson)(%24%7C%5C%3F)%22%20)%20)%20%7B%0A%20%20%20%20%23%20always%20set%20vary%20to%20make%20sure%20uncompressed%20versions%20dont%20always%20win%0A%20%20%20%20if%20(!beresp.http.Vary%20~%20%22Accept-Encoding%22)%20%7B%0A%20%20%20%20%20%20if%20(beresp.http.Vary)%20%7B%0A%20%20%20%20%20%20%20%20set%20beresp.http.Vary%20%3D%20beresp.http.Vary%20%22%2C%20Accept-Encoding%22%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20set%20beresp.http.Vary%20%3D%20%22Accept-Encoding%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20(req.http.Accept-Encoding%20%3D%3D%20%22gzip%22)%20%7B%0A%20%20%20%20%20%20set%20beresp.gzip%20%3D%20true%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20if%20((beresp.status%20%3D%3D%20500%20%7C%7C%20beresp.status%20%3D%3D%20503)%20%26%26%20req.restarts%20%3C%201%20%26%26%20(req.request%20%3D%3D%20%22GET%22%20%7C%7C%20req.request%20%3D%3D%20%22HEAD%22))%20%7B%0A%20%20%20%20restart%3B%0A%20%20%7D%0A%0A%20%20if%20(req.restarts%20%3E%200)%20%7B%0A%20%20%20%20set%20beresp.http.Fastly-Restarts%20%3D%20req.restarts%3B%0A%20%20%7D%0A%0A%20%20if%20(beresp.http.Set-Cookie)%20%7B%0A%20%20%20%20set%20req.http.Fastly-Cachetype%20%3D%20%22SETCOOKIE%22%3B%0A%20%20%20%20return(pass)%3B%0A%20%20%7D%0A%0A%20%20if%20(beresp.http.Cache-Control%20~%20%22private%22)%20%7B%0A%20%20%20%20set%20req.http.Fastly-Cachetype%20%3D%20%22PRIVATE%22%3B%0A%20%20%20%20return(pass)%3B%0A%20%20%7D%0A%0A%20%20if%20(beresp.status%20%3D%3D%20500%20%7C%7C%20beresp.status%20%3D%3D%20503)%20%7B%0A%20%20%20%20set%20req.http.Fastly-Cachetype%20%3D%20%22ERROR%22%3B%0A%20%20%20%20set%20beresp.ttl%20%3D%201s%3B%0A%20%20%20%20set%20beresp.grace%20%3D%205s%3B%0A%20%20%20%20return(deliver)%3B%0A%20%20%7D%0A%0A%20%20%23%20Clean%20out%20some%20AWS%20tags%20that%20don't%20need%0A%20%20unset%20beresp.http.x-amz-id-2%3B%0A%20%20unset%20beresp.http.x-amz-request-id%3B%0A%20%20unset%20beresp.http.x-amz-meta-s3cmd-attrs%3B%0A%20%20unset%20beresp.http.server%3B%0A%0A%20%20if%20(beresp.http.Expires%20%7C%7C%20beresp.http.Surrogate-Control%20~%20%22max-age%22%20%7C%7C%20beresp.http.Cache-Control%20~%20%22(s-maxage%7Cmax-age)%22)%20%7B%0A%20%20%20%20%23%20keep%20the%20ttl%20here%0A%20%20%7D%20else%20%7B%0A%20%20%20%20%23%20apply%20the%20default%20ttl%0A%20%20%20%20set%20beresp.ttl%20%3D%203600s%3B%0A%20%20%7D%0A%0A%20%20return(deliver)%3B%0A%7D%0A%0Asub%20vcl_hit%20%7B%0A%23FASTLY%20hit%0A%0A%20%20if%20(!obj.cacheable)%20%7B%0A%20%20%20%20return(pass)%3B%0A%20%20%7D%0A%20%20return(deliver)%3B%0A%7D%0A%0Asub%20vcl_miss%20%7B%0A%23FASTLY%20miss%0A%20%20return(fetch)%3B%0A%7D%0A%0Asub%20vcl_deliver%20%7B%0A%23FASTLY%20deliver%0A%20%20return(deliver)%3B%0A%7D%0A%0Asub%20vcl_error%20%7B%0A%23FASTLY%20error%0A%0A%20%20%23%20our%20own%20custom%20redirect%20error%0A%20%20%23%20so%20that%20we%20can%20control%20the%20http.Location%0A%20%20%23%20header%0A%20%20if%20(obj.status%20%3D%3D%20750)%20%7B%0A%20%20%20%20set%20obj.status%20%3D%20301%3B%0A%20%20%20%20set%20obj.http.Location%20%3D%20obj.response%3B%0A%20%20%20%20set%20obj.response%20%3D%20%22Moved%20Permanently%22%3B%0A%20%20%7D%0A%7D%0A%0Asub%20vcl_pass%20%7B%0A%23FASTLY%20pass%0A%7D%0A
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.