varnish 配置文件分享(sens杨 注释)
前言:
varnish为目前新兴起来的软件,由于中文文档比较少,配置文件比较复杂,所以在运用起来也是特别的费劲。一个偶然的机会在一个群里,有位varnish高手(sens杨)发表了一篇他对varnish配置文件理解的文档。对于学者来说很有价值。所以转载了过来。
原文如下:
varnish配置文件原文地址:http://groups.drupal.org/node/63203
注:红色字体是英文的直接翻译,有些地方翻译的不好
绿色部分是一些思考,这个配置对自身的业务配置的很详细,现在对除了cookie和TTL那部分外其他可以理解80%,慢慢学习体会
- backend default {
- .host =
"127.0.0.1"; - .connect_timeout = 600s;
- .between_bytes_timeout = 600s;
- .host =
"127.0.0.1"; - .connect_timeout = 600s;
- .between_bytes_timeout = 600s;
-
"localhost"; - }
- // Allow a grace period
for offering "stale" data in case backend lags (http://varnish-cache.org/wiki/VCLExampleGrace) -
set req.grace = 5m; - // 阻止非自己说测试网站(的数据访问)
- error 403
"Forbidden"; - if((req.url ~
"/server-status" || req.url ~ "/whm-server-status") && !(client.ip ~ techmission_internal)) { - }
- // 增加ping URL测试varnish状态(这个功能使用大部分vcl都没配置,可以增加一个监控状态)
- error 200
"OK"; - /* Normalize host header
to reduce variation in cache */ - if (req.http.host ==
"domain.org" && req.url !~ "^/blogs") { - }
- /* Normalize Accept-Encoding
to reduce effects of Vary: Accept-Encoding - Also note that Vary:
User-Agent is considered harmful - //规范化Accept-Encoding以减少Vary:Accept-Encoding影响(cf),也要注意Vary:
User-Agent认为是有害的 - if (req.http.Accept-Encoding) {
- //看到的其他大部分配置直接就下面了,没有先判断Accept-Encoding是否存在,这点可以再考虑考虑
- if (req.url ~
"\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { - remove req.http.Accept-Encoding;
- elsif (req.http.Accept-Encoding ~
"gzip") { - }
-
set req.http.Accept-Encoding = "deflate"; -
else { - // 不了解运算
- }
- //删除has_js和谷歌统计__*的cookies,同时删除collapsiblock cookies
- // Remove JSESSIONID cookie
from ChristianVolunteering.org static files and pages that are same for all users - if (req.http.host ~
"christianvolunteering.org" && - 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/opp[0-9]+\.jsp$" || - req.url ~
"org/[^/]+\.jsp$" || - ) {
- }
- //如果有”;”前缀,则删除
- // Remove empty cookies.
- if (req.http.Cookie ~
"^\s*$") { - }
- // exclude umjobs
and gospelpedia test sites - if (req.http.host ~
"domain1.org" || req.http.host ~ "domain2.org") { - }
- // exclude the cron
and supercron pages - if (req.url ~
"cron.php") { - }
- // 排除动态网页(也是提高(处理))
-
return (pass); - // 排除Referer的一些主题
-
return (pass); - /* Rules
to fix Moodle (thanks, gchaix!) */ - // Cache Moodle theme files
- if (req.url ~
"/pix/.*\.gif$") { - }
- // Moodle doesn't
like to be cached, passing - if (req.http.Cookie ~
"(MoodleSession|MoodleSessionTest)") { - }
-
return (pass); - if (req.url ~
"file.php") { - }
- // WPMU themes are
not playing well with static file caching - if (req.http.host ==
"domain.org" && req.url ~ "/blogs/(.*)/wp-content/themes") { - }
- /* 静态文件缓存规则
- // 使用Lightted服务静态文件
- // Lighttpd does
not require cookies - unset req.http.
Authorization; - }
- // large media files get piped directly
to lighttpd, to avoid overfilling cache - if (req.url ~
"\.(mp3|mp4|m4a|ogg|mov|avi|wmv)$" && req.url !~ "audio/download") { - pipe;
- // pipe large media files that come
from Drupal, also, but they can't go to lighty - if (req.url ~
"audio/play" || req.url ~ "audio/download") { - }
- }
- if (req.http.Cookie) {
- }
- /* 基于
User-Agent的移动网站有一个单独的对象缓存 -
set req.hash += "mobile"; - }
- // Grace
to allow varnish to serve content if backend is lagged -
set obj.grace = 5m; - //
Add line showing what cookie is once stripped by regex in vcl_recv -
set obj.http.X-Stripped-Cookie = req.http.Cookie; - //删除那些阻止缓存的
Set-Cookie头 - 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)$") { - }
- // Don't
set session cookie on ChristianVolunteering.org static files or pages that are same for all users - if (req.http.host ~
"christianvolunteering.org" && - 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/opp[0-9]+\.jsp$" || - req.url ~
"org/[^/]+\.jsp$" || - ) {
- // Remove empty
set-cookie. - unset obj.http.
Set-Cookie; - }
- /* ttl extensions */
- // If
on www.urbanministry.org or static.urbanministry.org, extend TTL by default (pt. 1) - if (req.http.host ==
"www.domain.org" || req.http.host == "static.domain.org") { - }
- // 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 - if ((req.http.host ~
"domain.edu" && req.url !~ "/courses") || (req.http.host ~ "blazinggrace.org" && req.url !~ "/forums") || (req.http.host ~ "techmission.org")) { -
set obj.http.X-Extended-TTL = "7d"; -
set obj.ttl = 1s; - }
- /* debugging
of why a page was not cacheable */ - if (!obj.cacheable) {
- if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
- // exclude umjobs
and gospelpedia test sites - if (req.http.host ~
"domain1.org" || req.http.host ~ "domain2.org") { - if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
-
set obj.http.X-Cacheable = "NO: Set-Cookie " obj.http.X-Cacheable; - }
- if (req.http.Cookie ~
"DRUPAL_UID|SESS") { - if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
-
set obj.http.X-Cacheable = "NO: Cache-Control set to not cache " obj.http.X-Cacheable; - }
- if (req.url ~
"cron.php") { - if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
-
set obj.http.X-Cacheable = "NO: Drupal un-cacheable path " obj.http.X-Cacheable; - }
- 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") { - if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
-
set obj.http.X-Cacheable = "NO: POST request " obj.http.X-Cacheable; - }
- if (req.http.
Authorization) { - if (obj.http.X-TTL-Extend) { unset obj.http.X-TTL-Extend; }
- //为urbaministry.org对象扩展TTL(不是面板、视图,或者quicktabs);经过varnish.module + um_common.module失效
-
set obj.ttl = 7d; - }
- }
- #
return (deliver); - // 增加缓存命中数据
- // if hit
add hit count -
set resp.http.X-Cache = "HIT"; - //
set resp.http.X-Cache-Served-URL = "SERVED " obj.http.X-Request-URL; // http headers are apparently not accessible in vcl_deliver - //
set resp.http.X-Cache-TTL = obj.ttl; // string representation not implemented yet (currently on 2.0.5) -
else { - }
- /* custom error subroutine -
to be a little friendlier to our users */ - sub vcl_error {
-
set obj.http.Content-Type = "text/html; charset=utf-8"; - <?xml version=
"1.0" encoding="utf-8"?> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - <head>
- </head>
- <h1>Error
"} obj.status " " obj.response {"</h1> - <p>Sorry we missed you!</p>
- <p>If you still receive this message 30 minutes
from now, please email webmaster@techmission.org.</p> - <p>XID:
"} req.xid {"</p> - <address>
- </address>
- </html>
-
return (deliver); - elsif(obj.status == 403) {
- synthetic {"