This repository has been archived by the owner on Feb 13, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 642
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes #97: Include Varnish in Drupal VM.
- Loading branch information
1 parent
45b6944
commit 2017889
Showing
5 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
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
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,3 +20,4 @@ geerlingguy.pimpmylog | |
geerlingguy.repo-remi | ||
geerlingguy.security | ||
geerlingguy.solr | ||
geerlingguy.varnish |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
vcl 4.0; | ||
|
||
# This Varnish VCL has been adapted from the Four Kitchens VCL for Varnish 3. | ||
|
||
# Default backend definition. Points to Apache, normally. | ||
backend default { | ||
.host = "{{ varnish_default_backend_host }}"; | ||
.port = "{{ varnish_default_backend_port }}"; | ||
.first_byte_timeout = 300s; | ||
} | ||
|
||
# Respond to incoming requests. | ||
sub vcl_recv { | ||
# Pass through any administrative or AJAX-related paths. | ||
if (req.url ~ "^/status\.php$" || | ||
req.url ~ "^/update\.php$" || | ||
req.url ~ "^/admin$" || | ||
req.url ~ "^/admin/.*$" || | ||
req.url ~ "^/flag/.*$" || | ||
req.url ~ "^.*/ajax/.*$" || | ||
req.url ~ "^.*/ahah/.*$") { | ||
return (pass); | ||
} | ||
|
||
# Removing cookies for static content so Varnish caches these files. | ||
if (req.url ~ "(?i)\.(pdf|asc|dat|txt|doc|xls|ppt|tgz|csv|png|gif|jpeg|jpg|ico|swf|css|js)(\?.*)?$") { | ||
unset req.http.Cookie; | ||
} | ||
|
||
# Remove all cookies that Drupal doesn't need to know about. We explicitly | ||
# list the ones that Drupal does need, the SESS and NO_CACHE. If, after | ||
# running this code we find that either of these two cookies remains, we | ||
# will pass as the page cannot be cached. | ||
if (req.http.Cookie) { | ||
# 1. Append a semi-colon to the front of the cookie string. | ||
# 2. Remove all spaces that appear after semi-colons. | ||
# 3. Match the cookies we want to keep, adding the space we removed | ||
# previously back. (\1) is first matching group in the regsuball. | ||
# 4. Remove all other cookies, identifying them by the fact that they have | ||
# no space after the preceding semi-colon. | ||
# 5. Remove all spaces and semi-colons from the beginning and end of the | ||
# cookie string. | ||
set req.http.Cookie = ";" + req.http.Cookie; | ||
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); | ||
set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|SSESS[a-z0-9]+|NO_CACHE)=", "; \1="); | ||
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); | ||
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); | ||
|
||
if (req.http.Cookie == "") { | ||
# If there are no remaining cookies, remove the cookie header. If there | ||
# aren't any cookie headers, Varnish's default behavior will be to cache | ||
# the page. | ||
unset req.http.Cookie; | ||
} | ||
else { | ||
# If there is any cookies left (a session or NO_CACHE cookie), do not | ||
# cache the page. Pass it on to Apache directly. | ||
return (pass); | ||
} | ||
} | ||
} | ||
|
||
# Set a header to track a cache HITs and MISSes. | ||
sub vcl_deliver { | ||
if (obj.hits > 0) { | ||
set resp.http.X-Varnish-Cache = "HIT"; | ||
} | ||
else { | ||
set resp.http.X-Varnish-Cache = "MISS"; | ||
} | ||
} | ||
|
||
# Instruct Varnish what to do in the case of certain backend responses (beresp). | ||
sub vcl_backend_response { | ||
# Cache 404s, 301s, at 500s with a short lifetime to protect the backend. | ||
if (beresp.status == 404 || beresp.status == 301 || beresp.status == 500) { | ||
set beresp.ttl = 10m; | ||
} | ||
|
||
# Don't allow static files to set cookies. | ||
# (?i) denotes case insensitive in PCRE (perl compatible regular expressions). | ||
# This list of extensions appears twice, once here and again in vcl_recv so | ||
# make sure you edit both and keep them equal. | ||
if (bereq.url ~ "(?i)\.(pdf|asc|dat|txt|doc|xls|ppt|tgz|csv|png|gif|jpeg|jpg|ico|swf|css|js)(\?.*)?$") { | ||
unset beresp.http.set-cookie; | ||
} | ||
|
||
# Allow items to remain in cache up to 2 hours past their cache expiration. | ||
set beresp.grace = 2h; | ||
} | ||
|