- 时间:2021-01-06 10:09 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:varnish 配置文件分享(sens杨 注释)
前言:
varnish 为目前新兴起来的软件,由于中文文档比较少,配置文件比较复杂,所以在运用起来也是特别的费劲。一个偶然的机会在一个群里,有位varnish高手( sens杨 )发表了一篇他对varnish配置文件理解的文档。对于学者来说很有价值。所以转载了过来。
原文如下:
varnish配置文件原文地址:http://groups.drupal.org/node/63203
注:红色字体是英文的直接翻译,有些地方翻译的不好
绿色部分是一些思考,这个配置对自身的业务配置的很详细,现在对除了cookie和TTL那部分外其他可以理解80%,慢慢学习体会
[list=1]
[*]
backend default { [/*]
[*]
.host = "127.0.0.1"; [/*]
[*]
.port = "8008"; [/*]
[*]
.connect_timeout = 600s; [/*]
[*]
.first_byte_timeout = 600s; [/*]
[*]
.between_bytes_timeout = 600s; [/*]
[*]
} [/*]
[*]
[/*]
[*]
backend lighttpd { [/*]
[*]
.host = "127.0.0.1"; [/*]
[*]
.port = "81"; [/*]
[*]
.connect_timeout = 600s; [/*]
[*]
.first_byte_timeout = 600s; [/*]
[*]
.between_bytes_timeout = 600s; [/*]
[*]
} [/*]
[*]
[/*]
[*]
acl techmission_internal { [/*]
[*]
"localhost"; [/*]
[*]
"127.0.0.1"; [/*]
[*]
} [/*]
[*]
sub vcl_recv { [/*]
[*]
// Allow a grace period for offering "stale" data in case backend lags (http://varnish-cache.org/wiki/VCLExampleGrace) [/*]
[*]
// 如果backend数据滞后,允许为“过时”数据提供一个宽松期 [/*]
[*]
set req.grace = 5m; [/*]
[*]
// block outside world from our test sites [/*]
[*]
// 阻止非自己说测试网站(的数据访问) [/*]
[*]
if ((req.http.host ~ "www.domain1.org|www.domain2.org") && !(client.ip ~ techmission_internal) && !(req.url ~ "^/ad|^/files")) { [/*]
[*]
error 403 "Forbidden"; [/*]
[*]
} [/*]
[*]
if((req.url ~ "/server-status" || req.url ~ "/whm-server-status") && !(client.ip ~ techmission_internal)) { [/*]
[*]
error 404 "Not Found"; [/*]
[*]
} [/*]
[*]
// add ping url to test Varnish status [/*]
[*]
// 增加ping URL测试varnish状态(这个功能使用大部分vcl都没配置,可以增加一个监控状态) [/*]
[*]
if (req.request == "GET" && req.url ~ "/varnish-ping") { [/*]
[*]
error 200 "OK"; [/*]
[*]
} [/*]
[*]
/* Normalize host header to reduce variation in cache */ [/*]
[*]
// 使host头规范化,以减少在cache中变化(这个为什么会说变化呢?) [/*]
[*]
if (req.http.host == "domain.org" && req.url !~ "^/blogs") { [/*]
[*]
set req.http.host = "www.domain.org"; [/*]
[*]
} [/*]
[*]
[/*]
[*]
/* Normalize Accept-Encoding to reduce effects of Vary: Accept-Encoding [/*]
[*]
(cf. http://varnish-cache.org/wiki/FAQ/Compression) [/*]
[*]
Also note that Vary: User-Agent is considered harmful [/*]
[*]
(cf. http://www.mail-archive.com/varnish-misc@projects.linpro.no/msg03296.html) */ [/*]
[*]
//规范化Accept-Encoding以减少Vary:Accept-Encoding影响(cf),也要注意Vary: User-Agent认为是有害的 [/*]
[*]
[/*]
[*]
if (req.http.Accept-Encoding) { [/*]
[*]
//if先判断是否可以存在,是为了缩小处理范围? [/*]
[*]
//看到的其他大部分配置直接就下面了,没有先判断Accept-Encoding是否存在,这点可以再考虑考虑 [/*]
[*]
//现在有req.can_gzip参数了,判断客户端是否接受压缩代码传输 [/*]
[*]
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { [/*]
[*]
// Don't compress already-compressed files [/*]
[*]
remove req.http.Accept-Encoding; [/*]
[*]
} [/*]
[*]
elsif (req.http.Accept-Encoding ~ "gzip") { [/*]
[*]
set req.http.Accept-Encoding = "gzip"; [/*]
[*]
} [/*]
[*]
elsif (req.http.Accept-Encoding ~ "deflate") { [/*]
[*]
set req.http.Accept-Encoding = "deflate"; [/*]
[*]
} [/*]
[*]
else { [/*]
[*]
// unknown algorithm [/*]
[*]
// 不了解运算 [/*]
[*]
remove req.http.Accept-Encoding; [/*]
[*]
} [/*]
[*]
} [/*]
[*]
[/*]
[*]
// Remove has_js and Google Analytics __* cookies. Also remove collapsiblock cookies. [/*]
[*]
//删除has_js和谷歌统计__*的cookies,同时删除collapsiblock cookies [/*]
[*]
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a|has_js|collapsiblock)=[^;]*", ""); [/*]
[*]
// Remove JSESSIONID cookie from ChristianVolunteering.org static files and pages that are same for all users [/*]
[*]
//从ChristianVolunteering.org静态文件和网页中删除JSESSIONID cookie,所有的用户是一样(处理)的 [/*]
[*]
if (req.http.host ~ "christianvolunteering.org" && [/*]
[*]
(req.url ~ "^/$" || [/*]
[*]
req.url ~ "(searchform|advancedsearch|shorttermmissions|recruitvolunteers|volunteergettingstarted|virtualvolunteer|organizationsearch|abs-bible-outreach|ab*ecutive-volunteers|abs-traveling-engagement-center|churchinstructions|sitemap|city|virtual|organizationlistings|orglistings7407|technology|volunteerlistings|forgotpassword|churchvolunteer|churchvolunteering|servicetrip|region|citysitemap|searchformadv|personalitytest|groupvolunteering|disasterreliefvolunteering|disasterrelief|internships|christiangapyear|about|FAQs|bookrecommendations|contact|pressrelease|training|volunteerstart|volunteerstories|articles)\.jsp$" || [/*]
[*]
req.url ~ "org/org[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "org/opp[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "orglistings[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "org/[^/]+\.jsp$" || [/*]
[*]
req.url ~ "volunteer/[^/]+\.jsp$") [/*]
[*]
) { [/*]
[*]
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(JSESSIONID)=[^;]*", ""); [/*]
[*]
} [/*]
[*]
// Remove a ";" prefix, if present. [/*]
[*]
//如果有”;”前缀,则删除 [/*]
[*]
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); [/*]
[*]
// Remove empty cookies. [/*]
[*]
// 删除空cookies [/*]
[*]
if (req.http.Cookie ~ "^\s*$") { [/*]
[*]
unset req.http.Cookie; [/*]
[*]
} [/*]
[*]
[/*]
[*]
// exclude umjobs and gospelpedia test sites [/*]
[*]
// 排除umjos和gospelpedia测试站点 [/*]
[*]
if (req.http.host ~ "domain1.org" || req.http.host ~ "domain2.org") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
[/*]
[*]
// exclude the cron and supercron pages [/*]
[*]
// 排除cron和supercron网页 [/*]
[*]
if (req.url ~ "cron.php") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
// exclude dynamic pages (as did Boost) [/*]
[*]
// 排除动态网页(也是提高(处理)) [/*]
[*]
if (req.http.host ~ "domain.org" && req.url ~ "^/(user/login|user/password|user/register|logout|cart|post-blog|site-feedback|cgi-bin/webscr|redirect-home|cv-enroll|recommended-content|node/8755|node/8830|node/8351|node/8757|node/8831|cart/(.*)|uc_paypal/(.*)|civicrm/(.*)|admin/(.*)|recommended-content/(.*)|comment/reply/(.*)|node/add/(.*))" ) { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
[/*]
[*]
// exclude in case of Referer Theme [/*]
[*]
// 排除Referer的一些主题 [/*]
[*]
if (req.http.host ~ "domain.org" && req.http.referer ~ "www.christianvolunteering.org|worldvision.christianvolunteering.org|ccda.christianvolunteering.org|www.ccda.org|www.urbanresource.net|mobile.urbanministry.org|www.ministeriourbano.com") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
/* Rules to fix Moodle (thanks, gchaix!) */ [/*]
[*]
// 修复Moodle规则 [/*]
[*]
// Cache Moodle theme files [/*]
[*]
//缓存Moodle主题文件 [/*]
[*]
if (req.url ~ "/pix/.*\.gif$") { [/*]
[*]
return (lookup); [/*]
[*]
} [/*]
[*]
[/*]
[*]
// Moodle doesn't like to be cached, passing [/*]
[*]
//Moodle主题不能缓存的就pass [/*]
[*]
if (req.http.Cookie ~ "(MoodleSession|MoodleSessionTest)") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
if (req.http.host == "www.domain.edu" && req.url ~ "^/courses") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
if (req.url ~ "file.php") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
[/*]
[*]
// WPMU themes are not playing well with static file caching [/*]
[*]
//WPMU主题使用静态文件缓存运行的不太好 [/*]
[*]
if (req.http.host == "domain.org" && req.url ~ "/blogs/(.*)/wp-content/themes") { [/*]
[*]
return (pass); [/*]
[*]
} [/*]
[*]
/* Rules for static file caching */ [/*]
[*]
/* 静态文件缓存规则 [/*]
[*]
// static files get served by Lighttpd [/*]
[*]
// 使用Lightted服务静态文件 [/*]
[*]
if (req.http.host != "server2.techmission.org" && req.url ~ "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|doc|ppt|pps|xls|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw)$") { [/*]
[*]
// Lighttpd does not require cookies [/*]
[*]
unset req.http.Cookie; [/*]
[*]
unset req.http.Authorization; [/*]
[*]
set req.backend = lighttpd; [/*]
[*]
} [/*]
[*]
[/*]
[*]
// large media files get piped directly to lighttpd, to avoid overfilling cache [/*]
[*]
// 大媒体文件直接使用pipe方式到lightted,避免缓存溢出 [/*]
[*]
if (req.url ~ "\.(mp3|mp4|m4a|ogg|mov|avi|wmv)$" && req.url !~ "audio/download") { [/*]
[*]
set req.backend = lighttpd; [/*]
[*]
pipe; [/*]
[*]
} [/*]
[*]
// pipe large media files that come from Drupal, also, but they can't go to lighty [/*]
[*]
// pipe从Drupal过来的大媒体文件,同时不去lighty [/*]
[*]
if (req.url ~ "audio/play" || req.url ~ "audio/download") { [/*]
[*]
pipe; [/*]
[*]
} [/*]
[*]
[/*]
[*]
} [/*]
[*]
sub vcl_hash { [/*]
[*]
if (req.http.Cookie) { [/*]
[*]
set req.hash += req.http.Cookie; [/*]
[*]
} [/*]
[*]
/* Have a separate object cache for mobile site based on User-Agent */ [/*]
[*]
/* 基于User-Agent的移动网站有一个单独的对象缓存 [/*]
[*]
if (req.http.host == "www.domain.org" && req.http.User-Agent ~ "(iPhone|iPod)") { [/*]
[*]
set req.hash += "mobile"; [/*]
[*]
} [/*]
[*]
} [/*]
[*]
sub vcl_fetch { [/*]
[*]
// Grace to allow varnish to serve content if backend is lagged [/*]
[*]
// 如果backend滞后,允许varnish服务内容有一个缓冲期 [/*]
[*]
set obj.grace = 5m; [/*]
[*]
[/*]
[*]
// Add line showing what cookie is once stripped by regex in vcl_recv [/*]
[*]
//在vcl_recv中通过regex增加展示cookie一次被剥夺的行 [/*]
[*]
set obj.http.X-Stripped-Cookie = req.http.Cookie; [/*]
[*]
set obj.http.X-Request-URL = req.url; [/*]
[*]
[/*]
[*]
/* removing Set-Cookie headers that prevent caching */ [/*]
[*]
//删除那些阻止缓存的Set-Cookie头 [/*]
[*]
// Don't have cookies on static files (gchaix says may cause loss of session; I haven't observed that) [/*]
[*]
if (req.url ~ "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|doc|ppt|pps|xls|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw)$") { [/*]
[*]
remove obj.http.Set-Cookie; [/*]
[*]
} [/*]
[*]
[/*]
[*]
// Don't set session cookie on ChristianVolunteering.org static files or pages that are same for all users [/*]
[*]
//对于(头)ChristianVolunteering.org的静态文件和网页,对所有用户不设置session cookie [/*]
[*]
if (req.http.host ~ "christianvolunteering.org" && [/*]
[*]
(req.url ~ "^/$" || [/*]
[*]
req.url ~ "(searchform|advancedsearch|shorttermmissions|recruitvolunteers|volunteergettingstarted|virtualvolunteer|organizationsearch|abs-bible-outreach|ab*ecutive-volunteers|abs-traveling-engagement-center|churchinstructions|sitemap|city|virtual|organizationlistings|orglistings7407|technology|volunteerlistings|forgotpassword|churchvolunteer|churchvolunteering|servicetrip|region|citysitemap|searchformadv|personalitytest|groupvolunteering|disasterreliefvolunteering|disasterrelief|internships|christiangapyear|about|FAQs|bookrecommendations|contact|pressrelease|training|volunteerstart|volunteerstories|articles)\.jsp$" || [/*]
[*]
req.url ~ "org/org[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "org/opp[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "orglistings[0-9]+\.jsp$" || [/*]
[*]
req.url ~ "org/[^/]+\.jsp$" || [/*]
[*]
req.url ~ "volunteer/[^/]+\.jsp$") [/*]
[*]
) { [/*]
[*]
set obj.http.Set-Cookie = regsuball(req.http.Cookie, "(^|;\s*)(JSESSIONID)=[^;]*", ""); [/*]
[*]
// Remove empty set-cookie. [/*]
[*]
if (obj.http.Set-Cookie ~ "^\s*$") { [/*]
[*]
unset obj.http.Set-Cookie; [/*]
[*]
} [/*]
[*]
} [/*]
[*]
[/*]
[*]
/* ttl extensions */ [/*]
[*]
/* ttl 扩展 */ [/*]
[*]
// If on www.urbanministry.org or static.urbanministry.org, extend TTL by default (pt. 1) [/*]
[*]
//对于www.urbanministry.org或static.urbanministry.org,默认情况下扩展TTL [/*]
[*]
if (req.http.host == "www.domain.org" || req.http.host == "static.domain.org") { [/*]
[*]
set obj.http.X-TTL-Extend = "YES"; [/*]
[*]
} [/*]
[*]
[/*]
[*]
// If on cityvision.edu, but not in Moodle, or if on blazinggrace.org, but not in forums, or if on techmission.org, change obj.ttl [/*]
[*]
//如果主机头是cityvision.edu但是不在Moodle中,或者主机头是blazinggrace.org,但不在forums中,或者主机头是techmission.org,更改obj.ttl [/*]
[*]
if ((req.http.host ~ "domain.edu" && req.url !~ "/courses") || (req.http.host ~ "blazinggrace.org" && req.url !~ "/forums") || (req.http.host ~ "techmission.org")) { [/*]
[*]
set obj.ttl = 7d; [/*]
[*]
set obj.http.X-Extended-TTL = "7d"; [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (obj.status == 404) { [/*]
[*]
set obj.ttl = 1s; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
/* debugging of why a page was not cacheable */ [/*]
[*]
/* debug为什么页面没有缓存 */ [/*]
[*]
if (!obj.cacheable) { [/*]
[*]
set obj.http.X-Cacheable = "NO: Varnish says not cacheable " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
[/*]
[*]
// exclude umjobs and gospelpedia test sites [/*]
[*]
// 排除umjobs和gospelpedia测试站点 [/*]
[*]
if (req.http.host ~ "domain1.org" || req.http.host ~ "domain2.org") { [/*]
[*]
set obj.http.X-Cacheable = "NO: Test domain " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (obj.http.Set-Cookie) { [/*]
[*]
set obj.http.X-Cacheable = "NO: Set-Cookie " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.http.Cookie ~ "DRUPAL_UID|SESS") { [/*]
[*]
set obj.http.X-Cacheable = "NO: Got Session " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (obj.http.Cache-Control ~ "private" || obj.http.Cache-Control ~ "no-cache") { [/*]
[*]
set obj.http.X-Cacheable = "NO: Cache-Control set to not cache " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.url ~ "cron.php") { [/*]
[*]
set obj.http.X-Cacheable = "NO: Cron job " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.http.host ~ "domain.org" && req.url ~ "^/(user/login|user/password|user/register|logout|cart|post-blog|site-feedback|cgi-bin/webscr|redirect-home|cv-enroll|recommended-content|node/8755|node/8830|node/8351|node/8757|node/8831|cart/(.*)|uc_paypal/(.*)|civicrm/(.*)|admin/(.*)|recommended-content/(.*)|comment/reply/(.*)|node/add/(.*))" ) { [/*]
[*]
set obj.http.X-Cacheable = "NO: Drupal un-cacheable path " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.http.host ~ "domain.org" && req.http.referer ~ "www.christianvolunteering.org|worldvision.christianvolunteering.org|ccda.christianvolunteering.org|www.ccda.org|www.urbanresource.net|mobile.urbanministry.org|www.ministeriourbano.com") { [/*]
[*]
set obj.http.X-Cacheable = "NO: Referer Theme " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.request == "POST") { [/*]
[*]
set obj.http.X-Cacheable = "NO: POST request " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
if (req.http.Authorization) { [/*]
[*]
set obj.http.X-Cacheable = "NO: HTTP Authentication " obj.http.X-Cacheable; [/*]
[*]
if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; } [/*]
[*]
} [/*]
[*]
[/*]
[*]
// extend TTL for urbanministry.org objects (but not panels, views, or quicktabs); invalidation thru varnish.module + um_common.module [/*]
[*]
//为urbaministry.org对象扩展TTL(不是面板、视图,或者quicktabs);经过varnish.module + um_common.module失效 [/*]
[*]
if((req.http.host == "www.domain.org" || req.http.host == "static.domain.org") && obj.http.X-TTL-Extend == "YES" && !obj.http.X-Cache-Type) { [/*]
[*]
set obj.ttl = 7d; [/*]
[*]
set obj.http.X-Extended-TTL = "7d"; [/*]
[*]
} [/*]
[*]
[/*]
[*]
} [/*]
[*]
sub vcl_deliver { [/*]
[*]
# return (deliver); [/*]
[*]
// add cache hit data [/*]
[*]
// 增加缓存命中数据 [/*]
[*]
if (obj.hits > 0) { [/*]
[*]
// if hit add hit count [/*]
[*]
// 如果命中,增加命中数 [/*]
[*]
set resp.http.X-Cache = "HIT"; [/*]
[*]
set resp.http.X-Cache-Hits = obj.hits; [/*]
[*]
// set resp.http.X-Cache-Served-URL = "SERVED " obj.http.X-Request-URL; // http headers are apparently not accessible in vcl_deliver [/*]
[*]
//在vcl_deliver中http头明显不可访问 [/*]
[*]
// set resp.http.X-Cache-TTL = obj.ttl; // string representation not implemented yet (currently on 2.0.5) [/*]
[*]
} [/*]
[*]
else { [/*]
[*]
set resp.http.X-Cache = "MISS"; [/*]
[*]
} [/*]
[*]
} [/*]
[*]
/* custom error subroutine - to be a little friendlier to our users */ [/*]
[*]
//指定error子程序,对用户有好些 [/*]
[*]
sub vcl_error { [/*]
[*]
if(obj.status == 503) { [/*]
[*]
set obj.http.Content-Type = "text/html; charset=utf-8"; [/*]
[*]
synthetic {" [/*]
[*]
<?xml version="1.0" encoding="utf-8"?> [/*]
[*]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" [/*]
[*]
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> [/*]
[*]
<html> [/*]
[*]
<head> [/*]
[*]
<title>"} obj.status " " obj.response {"</title> [/*]
[*]
</head> [/*]
[*]
<body> [/*]
[*]
<h1>Error "} obj.status " " obj.response {"</h1> [/*]
[*]
<p>"} obj.response {"</p> [/*]
[*]
<p>Sorry we missed you!</p> [/*]
[*]
<p>We are currently upgrading our websites to serve you better. We should be up again soon.</p> [/*]
[*]
<p>If you still receive this message 30 minutes from now, please email webmaster@techmission.org.</p> [/*]
[*]
<h3>Guru Meditation:</h3> [/*]
[*]
<p>XID: "} req.xid {"</p> [/*]
[*]
<hr> [/*]
[*]
<address> [/*]
[*]
Served by <a href="http://www.varnish-cache.org/">Varnish cache server</a> [/*]
[*]
</address> [/*]
[*]
</body> [/*]
[*]
</html> [/*]
[*]
"}; [/*]
[*]
return (deliver); [/*]
[*]
} [/*]
[*]
elsif(obj.status == 403) { [/*]
[*]
set obj.http.Content-Type = "text/html; charset=utf-8"; [/*]
[*]
synthetic {" [/*]
[*]
<?xml version="1.0" encoding="utf-8"?> [/*]
[*]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" [/*]
[*]
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> [/*]
[*]
<html> [/*]
[*]
<head> [/*]
[*]
<title>"} obj.status " " obj.response {"</title> [/*]
[*]
</head> [/*]
[*]
<body> [/*]
[*]
<h1>Error "} obj.status " " obj.response {"</h1> [/*]
[*]
<p>"} obj.response {"</p> [/*]
[*]
<h2>TechMission Developer Access Only</h2> [/*]
[*]
<p>This page is only accessible to our staff. Please visit our main websites www.techmission.org,www.urbanministry.org, and " title="www.christianvolunteering.org. [/*]
[*]
" style="color: rgb(2, 122, 198); font-weight: bold; text-decoration: none; ">www.christianvolunteering.org.</p> [/*]
[*]
<! [/*]
[*]
<h3>Guru Meditation:</h3> [/*]
[*]
<p>XID: "} req.xid {"</p> [/*]
[*]
<hr> [/*]
[*]
<address> [/*]
[*]
Served by <a href="http://www.varnish-cache.org/">Varnish cache server</a> [/*]
[*]
</address> [/*]
[*]
</body> [/*]
[*]
</html> [/*]
[*]
"}; [/*]
[*]
return (deliver); [/*]
[*]
} [/*]
[*]
else { [/*]
[*]
set obj.http.Content-Type = "text/html; charset=utf-8"; [/*]
[*]
synthetic {" [/*]
[*]
<?xml version="1.0" encoding="utf-8"?> [/*]
[*]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" [/*]
[*]
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> [/*]
[*]
<html> [/*]
[*]
<head> [/*]
[*]
<title>"} obj.status " " obj.response {"</title> [/*]
[*]
</head> [/*]
[*]
<body> [/*]
[*]
<h1>Error "} obj.status " " obj.response {"</h1> [/*]
[*]
<p>"} obj.response {"</p> [/*]
[*]
<h3>Guru Meditation:</h3> [/*]
[*]
<p>XID: "} req.xid {"</p> [/*]
[*]
<hr> [/*]
[*]
<address> [/*]
[*]
Served by <a href="http://www.varnish-cache.org/">Varnish cache server</a> [/*]
[*]
</address> [/*]
[*]
</body> [/*]
[*]
</html> [/*]
[*]
"}; [/*]
[*]
return (deliver); [/*]
[*]
} [/*]
[*]
} [/*]
[/list]
在这里感谢 sens杨 同学对配置文档的解释。
下面编程素材网小编特整理的没有前面数字的文件方法大家使用
backend default {
.host = "127.0.0.1";
.port = "8008";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
backend lighttpd {
.host = "127.0.0.1";
.port = "81";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
acl techmission_internal {
"localhost";
"127.0.0.1";
}
sub vcl_recv {
// Allow a grace period for offering "stale" data in case backend lags (http://varnish-cache.org/wiki/VCLExampleGrace)
// 如果backend数据滞后,允许为“过时”数据提供一个宽松期
set req.grace = 5m;
// block outside world from our test sites
// 阻止非自己说测试网站(的数据访问)
if ((req.http.host ~ "www.domain1.org|www.domain2.org") && !(client.ip ~ techmission_internal) && !(req.url ~ "^/ad|^/files")) {
error 403 "Forbidden";
}
if((req.url ~ "/server-status" || req.url ~ "/whm-server-status") && !(client.ip ~ techmission_internal)) {
error 404 "Not Found";
}
// add ping url to test Varnish status
// 增加ping URL测试varnish状态(这个功能使用大部分vcl都没配置,可以增加一个监控状态)
if (req.request == "GET" && req.url ~ "/varnish-ping") {
error 200 "OK";
}
/* Normalize host header to reduce variation in cache */
// 使host头规范化,以减少在cache中变化(这个为什么会说变化呢?)
if (req.http.host == "domain.org" && req.url !~ "^/blogs") {
set req.http.host = "www.domain.org";
}
/* Normalize Accept-Encoding to reduce effects of Vary: Accept-Encoding
(cf. http://varnish-cache.org/wiki/FAQ/Compression)
Also note that Vary: User-Agent is considered harmful
(cf. http://www.mail-archive.com/varnish-misc@projects.linpro.no/msg03296.html) */
//规范化Accept-Encoding以减少Vary:Accept-Encoding影响(cf),也要注意Vary: User-Agent认为是有害的
if (req.http.Accept-Encoding) {
//if先判断是否可以存在,是为了缩小处理范围?
//看到的其他大部分配置直接就下面了,没有先判断Accept-Encoding是否存在,这点可以再考虑考虑
//现在有req.can_gzip参数了,判断客户端是否接受压缩代码传输
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
// Don't compress already-compressed files
remove req.http.Accept-Encoding;
}
elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
}
elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
}
else {
// unknown algorithm
// 不了解运算
remove req.http.Accept-Encoding;
}
}
// Remove has_js and Google Analytics __* cookies. Also remove collapsiblock cookies.
//删除has_js和谷歌统计__*的cookies,同时删除collapsiblock cookies
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a|has_js|collapsiblock)=[^;]*", "");
// Remove JSESSIONID cookie from ChristianVolunteering.org static files and pages that are same for all users
//从ChristianVolunteering.org静态文件和网页中删除JSESSIONID cookie,所有的用户是一样(处理)的
if (req.http.host ~ "christianvolunteering.org" &&
(req.url ~ "^/$" ||
req.url ~ "(searchform|advancedsearch|shorttermmissions|recruitvolunteers|volunteergettingstarted|virtualvolunteer|organizationsearch|abs-bible-outreach|ab*ecutive-volunteers|abs-traveling-engagement-center|churchinstructions|sitemap|city|virtual|organizationlistings|orglistings7407|technology|volunteerlistings|forgotpassword|churchvolunteer|churchvolunteering|servicetrip|region|citysitemap|searchformadv|personalitytest|groupvolunteering|disasterreliefvolunteering|disasterrelief|internships|christiangapyear|about|FAQs|bookrecommendations|contact|pressrelease|training|volunteerstart|volunteerstories|articles)\.jsp$" ||
req.url ~ "org/org[0-9]+\.jsp$" ||
req.url ~ "org/opp[0-9]+\.jsp$" ||
req.url ~ "orglistings[0-9]+\.jsp$" ||
req.url ~ "org/[^/]+\.jsp$" ||
req.url ~ "volunteer/[^/]+\.jsp$")
) {
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(JSESSIONID)=[^;]*", "");
}
// Remove a ";" prefix, if present.
//如果有”;”前缀,则删除
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
// Remove empty cookies.
// 删除空cookies
if (req.http.Cookie ~ "^\s*$") {
unset req.http.Cookie;
}
// exclude umjobs and gospelpedia test sites
// 排除umjos和gospelpedia测试站点
if (req.http.host ~ "domain1.org" || req.http.host ~ "domain2.org") {
return (pass);
}
// exclude the cron and supercron pages
// 排除cron和supercron网页
if (req.url ~ "cron.php") {
return (pass);
}
// exclude dynamic pages (as did Boost)
// 排除动态网页(也是提高(处理))
if (req.http.host ~ "domain.org" && req.url ~ "^/(user/login|user/password|user/register|logout|cart|post-blog|site-feedback|cgi-bin/webscr|redirect-home|cv-enroll|recommended-content|node/8755|node/8830|node/8351|node/8757|node/8831|cart/(.*)|uc_paypal/(.*)|civicrm/(.*)|admin/(.*)|recommended-content/(.*)|comment/reply/(.*)|node/add/(.*))" ) {
return (pass);
}
// exclude in case of Referer Theme
// 排除Referer的一些主题
if (req.http.host ~ "domain.org" && req.http.referer ~ "www.christianvolunteering.org|worldvision.christianvolunteering.org|ccda.christianvolunteering.org|www.ccda.org|www.urbanresource.net|mobile.urbanministry.org|www.ministeriourbano.com") {
return (pass);
}
/* Rules to fix Moodle (thanks, gchaix!) */
// 修复Moodle规则
// Cache Moodle theme files
//缓存Moodle主题文件
if (req.url ~ "/pix/.*\.gif$") {
return (lookup);
}
// Moodle doesn't like to be cached, passing
//Moodle主题不能缓存的就pass
if (req.http.Cookie ~ "(MoodleSession|MoodleSessionTest)") {
return (pass);
}
if (req.http.host == "www.domain.edu" && req.url ~ "^/courses") {
return (pass);
}
if (req.url ~ "file.php") {
return (pass);
}
// WPMU themes are not playing well with static file caching
//WPMU主题使用静态文件缓存运行的不太好
if (req.http.host == "domain.org" && req.url ~ "/blogs/(.*)/wp-content/themes") {
return (pass);
}
/* Rules for static file caching */
/* 静态文件缓存规则
// static files get served by Lighttpd
// 使用Lightted服务静态文件
if (req.http.host != "server2.techmission.org" && req.url ~ "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|doc|ppt|pps|xls|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw)$") {
// Lighttpd does not require cookies
unset req.http.Cookie;
unset req.http.Authorization;
set req.backend = lighttpd;
}
// large media files get piped directly to lighttpd, to avoid overfilling cache
// 大媒体文件直接使用pipe方式到lightted,避免缓存溢出
if (req.url ~ "\.(mp3|mp4|m4a|ogg|mov|avi|wmv)$" && req.url !~ "audio/download") {
set req.backend = lighttpd;
pipe;
}
// pipe large media files that come from Drupal, also, but they can't go to lighty
// pipe从Drupal过来的大媒体文件,同时不去lighty
if (req.url ~ "audio/play" || req.url ~ "audio/download") {
pipe;
}
}
sub vcl_hash {
if (req.http.Cookie) {
set req.hash += req.http.Cookie;
}
/* Have a separate object cache for mobile site based on User-Agent */
/* 基于User-Agent的移动网站有一个单独的对象缓存
if (req.http.host == "www.domain.org" && req.http.User-Agent ~ "(iPhone|iPod)") {
set req.hash += "mobile";
}
}
sub vcl_fetch {
// Grace to allow varnish to serve content if backend is lagged
// 如果backend滞后,允许varnish服务内容有一个缓冲期
set obj.grace = 5m;
// Add line showing what cookie is once stripped by