-
-
Save arunakulat/7493019 to your computer and use it in GitHub Desktop.
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
# A drupal varnish config file for varnish 3.x | |
# | |
# Will work with Drupal 7 and Pressflow 6. | |
# | |
# Default backend definition. Set this to point to your content | |
# server. We are assuming you have a web server running on port 8080. | |
# | |
C{ | |
#include <sys/time.h> | |
#include <stdio.h> | |
}C | |
backend default { | |
.host = "127.0.0.1"; | |
.port = "8080"; | |
.connect_timeout = 600s; | |
.first_byte_timeout = 600s; | |
.between_bytes_timeout = 600s; | |
} | |
# | |
sub vcl_recv { | |
if (req.restarts == 0) { | |
if (req.http.x-forwarded-for) { | |
set req.http.X-Forwarded-For = | |
req.http.X-Forwarded-For + ", " + client.ip; | |
} else { | |
set req.http.X-Forwarded-For = client.ip; | |
} | |
C{ | |
struct timeval detail_time; | |
gettimeofday(&detail_time,NULL); | |
char start[20]; | |
sprintf(start, "t=%lu%06lu", detail_time.tv_sec, detail_time.tv_usec); | |
VRT_SetHdr(sp, HDR_REQ, "\020X-Request-Start:", start, vrt_magic_string_end); | |
}C | |
} | |
if (req.request != "GET" && | |
req.request != "HEAD" && | |
req.request != "PUT" && | |
req.request != "POST" && | |
req.request != "TRACE" && | |
req.request != "OPTIONS" && | |
req.request != "DELETE") { | |
/* Non-RFC2616 or CONNECT which is weird. */ | |
return (pipe); | |
} | |
if (req.request != "GET" && req.request != "HEAD") { | |
/* We only deal with GET and HEAD by default */ | |
return (pass); | |
} | |
## fix compression per http://www.varnish-cache.org/trac/wiki/FAQ/Compression | |
if (req.http.Accept-Encoding) { | |
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { | |
# No point in compressing these | |
remove req.http.Accept-Encoding; | |
} elsif (req.http.Accept-Encoding ~ "gzip") { | |
set req.http.Accept-Encoding = "gzip"; | |
} elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") { | |
set req.http.Accept-Encoding = "deflate"; | |
} else { | |
# unkown algorithm | |
remove req.http.Accept-Encoding; | |
} | |
} | |
# Always cache things with these extensions | |
if (req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$") { | |
return (lookup); | |
} | |
# Do not cache these paths. | |
if (req.url ~ "^/status\.php$" || | |
req.url ~ "^/update\.php$" || | |
req.url ~ "^/cron\.php$" || | |
req.url ~ "^/install\.php$" || | |
req.url ~ "^/ooyala/ping$" || | |
req.url ~ "^/admin" || | |
req.url ~ "^/admin/.*$" || | |
req.url ~ "^/flag/.*$" || | |
req.url ~ "^.*/server-status$" || | |
req.url ~ "^.*/ajax/.*$" || | |
req.url ~ "^.*/ahah/.*$") { | |
return (pass); | |
} | |
## Remove has_js, toolbar collapsed and Google Analytics cookies. | |
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js|Drupal.toolbar.collapsed|Drupal.tableDrag.showWeight)=[^;]*", ""); | |
## Remove a ";" prefix, if present. | |
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); | |
## Remove empty cookies. | |
if (req.http.Cookie ~ "^\s*$") { | |
unset req.http.Cookie; | |
} | |
# If they still have any cookies, do not cache. | |
if (req.http.Authorization || req.http.Cookie) { | |
/* Not cacheable by default */ | |
return (pass); | |
} | |
# Don't cache Drupal logged-in user sessions | |
# LOGGED_IN is the cookie that earlier version of Pressflow sets | |
# VARNISH is the cookie which the varnish.module sets | |
if (req.http.Cookie ~ "(VARNISH|DRUPAL_UID|LOGGED_IN)") { | |
return (pass); | |
} | |
return (lookup); | |
} | |
sub vcl_hash { | |
hash_data(req.url); | |
if (req.http.host) { | |
hash_data(req.http.host); | |
} else { | |
hash_data(server.ip); | |
} | |
return (hash); | |
} | |
sub vcl_deliver { | |
# From http://varnish-cache.org/wiki/VCLExampleLongerCaching | |
if (resp.http.magicmarker) { | |
/* Remove the magic marker */ | |
unset resp.http.magicmarker; | |
/* By definition we have a fresh object */ | |
set resp.http.age = "0"; | |
} | |
#add cache hit data | |
if (obj.hits > 0) { | |
#if hit add hit count | |
set resp.http.X-Varnish-Cache = "HIT"; | |
set resp.http.X-Varnish-Cache-Hits = obj.hits; | |
} | |
else { | |
set resp.http.X-Varnish-Cache = "MISS"; | |
} | |
return (deliver); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment