[英]Varnish 3 VCL Config to Cache Only Home Page - Not Working
我正在嘗試使用Varnish僅緩存主頁(出於測試目的)。 我現在只想為匿名用戶緩存主頁。 為此,如果有一個名為“ sessionid”的cookie,我想忽略緩存。
另外,Django的后端總是發送我想刪除的Varying:cookie標頭,因為Varnish會為每種cookie組合生成不同的緩存。 而且這種組合一直在變化,因為be總是也會發送“ csrf” cookie,這總是不同的。
綜上所述:
服務器配置:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
backend default {
.host = "127.0.0.1";
.port = "8000";
}
sub vcl_recv
{
if (! req.http.Authorization ~ "Basic xxxxxxxxx=")
{
error 401 "Restricted";
}
# caching only home page
if (! req.url == "/" || req.http.Cookie ~ "sessionid" || req.request == "POST") {
return(pass);
}
unset req.http.Cookie;
}
sub vcl_fetch
{
# Remove 'vary' header if home page is called
if (bereq.url == "/") {
unset beresp.http.Vary;
set beresp.ttl = 20m;
}
}
sub vcl_error
{
if (obj.status == 401) {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.WWW-Authenticate = "Basic realm=Secured";
synthetic {"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
</HEAD>
<BODY><H1>401 Unauthorized (varnish)</H1></BODY>
</HTML>
"};
return (deliver);
}
}
此配置適用於Varnish 4,但似乎不適用於Varnish 3(稍作修改)。
要知道它不起作用,請查看服務器的響應,我看到“ age”標頭始終為0。
這是請求/響應的詳細信息:
Accept-Ranges:bytes
Age:0
Connection:keep-alive
Content-Encoding:gzip
Content-Length:10808
Content-Type:text/html; charset=utf-8
Date:Thu, 22 Oct 2015 08:32:41 GMT
Server:nginx/1.4.6 (Ubuntu)
Set-Cookie:csrftoken=UFON6QI7JHAOVDAOk2fusWtZirOF3dlc; expires=Thu, 20-Oct-2016 08:32:41 GMT; Max-Age=31449600; Path=/
Via:1.1 varnish
X-Varnish:1495644039
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-CA,en;q=0.8,fr-CA;q=0.6,fr;q=0.4
Authorization:Basic xxxxxx=
Cache-Control:no-cache
Connection:keep-alive
Cookie:csrftoken=iclCbw25qRf25gYscUVyM1P6mHItWXPq
DNT:1
Host:dev.xxxxxx.com
Pragma:no-cache
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
這是一個有效的配置。 老實說,我不知道是什么使它起作用。
backend default {
.host = "127.0.0.1";
.port = "8000";
}
sub vcl_recv
{
set req.backend = default;
if (! req.http.Authorization ~ "Basic xxxxxxx=")
{
error 401 "Restricted";
}
# caching only home page
if (req.url != "/" || req.http.Cookie ~ "sessionid" || req.request == "POST") {
return(pass);
}
unset req.http.cookie;
return(lookup);
}
sub vcl_fetch
{
# Remove 'vary' header if home page is called
if (bereq.url == "/") {
set beresp.ttl = 20m;
}
unset beresp.http.Vary;
return(deliver);
}
sub vcl_deliver
{
return(deliver);
}
sub vcl_hit
{
return(deliver);
}
sub vcl_error
{
if (obj.status == 401) {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.WWW-Authenticate = "Basic realm=Secured";
synthetic {"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
</HEAD>
<BODY><H1>401 Unauthorized (varnish)</H1></BODY>
</HTML>
"};
return (deliver);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.