Forked from section-io-gists/pagespeed-requirement.vcl
Last active
October 5, 2020 20:00
-
-
Save mklooss/dca24a68b4476908969be0322f11b32c to your computer and use it in GitHub Desktop.
Using the PageSpeed module alongside Varnish, you will need to configure Varnish to handle PageSpeed optimizations.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Note: You will want to add the snippet: `include "pagespeed-requirement.vcl";` above your `vcl_recv` in the default.vcl file. | |
sub vcl_recv { | |
call pagespeed_capability_detection; | |
} | |
# Function derived from requirements here https://modpagespeed.com/doc/downstream-caching#ps-capabilitylist | |
# Additional detection logic for crawlers, tablet and mobile devices. | |
sub pagespeed_capability_detection { | |
if (req.http.User-Agent ~ "(?i)Chrome/[3][2-9]+\.|Chrome/[4-9][0-9]+\.|Chrome/[0-9]{3,}\.|Firefox/([6-9][5-9]|\d{3,})\.") { | |
# Cache-fragment 1: Desktop User-Agents that support lazyload_images (ll), | |
# inline_images (ii), defer_javascript (dj), webp (jw) and lossless_webp | |
# (ws). | |
set req.http.PS-CapabilityList = "ll,ii,dj,jw,ws:"; | |
} else if (req.http.User-Agent ~ "(?i)Firefox/[4-9].+|Firefox/[\d][\d]+|MSIE 10\.|Safari") { | |
# Cache-fragment 2: Desktop User-Agents that support lazyload_images (ll), | |
# inline_images (ii) and defer_javascript (dj). | |
# Note: Wget is added for testing purposes only. | |
set req.http.PS-CapabilityList = "ll,ii,dj:"; | |
} else { | |
# As a fallback, the PS-CapabilityList header that is sent to the upstream | |
# PageSpeed server should be for a device with no browser specific optimizations. | |
set req.http.PS-CapabilityList = "fully general optimizations only"; | |
} | |
# Cache-fragment 3: This fragment contains (a) Desktop User-Agents that | |
# match fragments 1 or 2 but should not because they represent older | |
# versions of certain browsers or bots and (b) Tablet User-Agents that | |
# on all browsers and use image compression qualities applicable to large | |
# screens. Note that even Tablets that are capable of supporting inline or | |
# webp images, e.g. Android 4.1.2, will not get these advanced | |
# optimizations. | |
if (req.http.User-Agent ~ "(?i)Firefox/[1-2]\.|MSIE [5-8]\.|bot|Yahoo!|Ruby|RPT-HTTPClient|(Google \(\+https\:\/\/developers\.google\.com\/\+\/web\/snippet\/\))|Android|iPad|TouchPad|Silk-Accelerated|Kindle Fire") { | |
set req.http.PS-CapabilityList = "LargeScreen.SkipUADependentOptimizations:"; | |
} | |
# Cache-fragment 4: Mobiles and small screen Tablets will use image compression | |
# qualities applicable to small screens, but all other optimizations will be | |
# those that work on all browsers. | |
if (req.http.User-Agent ~ "(?i)Mozilla.*Android.*Mobile*|iPhone|BlackBerry|Opera Mobi|Opera Mini|SymbianOS|UP.Browser|J-PHONE|Profile/MIDP|portalmmm|DoCoMo|Obigo|Galaxy Nexus|GT-I9300|GT-N7100|HTC One|Nexus [4|7|S]|Xoom|XT907") { | |
set req.http.PS-CapabilityList = "TinyScreen.SkipUADependentOptimizations:"; | |
} | |
} | |
sub vcl_hash { | |
# Split cache by PageSpeed capability | |
hash_data(req.http.PS-CapabilityList); | |
} | |
sub vcl_deliver { | |
# The following line can be uncommented for debugging purposes and will | |
# add a response header to show the header parameter sent to pagespeed. | |
#set resp.http.section-io-PS-capability = req.http.PS-CapabilityList; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment