所以我绝望地试图让Varnish完全缓存我的php应用程序。
它是一个繁重的应用程序,每个页面加载需要2到4秒,因为它会生成多个CURL请求来填充页面内容。
其中一些内容是通过php + curl加载的,其余的是通过php + curl + ajax_manager + ajax加载的。
这是ajax内容我遇到缓存问题。
网页网址,例如:domain.com/search.html?q=Some+Query&var=ABC&gclid=23ndo2dofbwvrf2ih2v3jv
现在我可以使用varnish来缓存除ajax之外的所有内容。问题是一旦页面在缓存中我再也看不到ajax内容了,其他一切都在那里,ajax内容只在 那里出现在第一页加载即新拷贝。
我能以某种方式将其推向清漆吗?
我将我的ajax调用从POST切换到GET,看起来它可以阻止包含无缓存控件的标题,但我仍然无法找到将ajax内容推送到varnish中的方法。
这是我现在提出的所有工作但忽略了ajax,并没有缓存它并且缓存中缺少ajax内容。
sub vcl_recv {
set req.url = regsuball(req.url,"\?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
set req.url = regsuball(req.url,"\?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"
## always cache these images & static assets
if (req.request == "GET" && req.url ~ "\.(css|js|gif|jpg|jpeg|bmp|png|ico|img|tga|wmf)$") {
remove req.http.cookie;
return(lookup);
}
if (req.request == "GET" && req.http.X-Requested-With != "XMLHttpRequest") {
# remove req.http.cookie;
# return(lookup);
}
return(lookup);
}
sub vcl_fetch {
if (beresp.ttl < 120s) {
set beresp.ttl = 120s;
}
unset beresp.http.Set-Cookie;
set beresp.ttl = 6h;
return(deliver);
}
好消息是页面加载时间从2到4秒变为250毫秒,这是令人惊叹的,如果我可以得到这个工作会产生巨大的差异。
感谢