清漆不起作用

清漆不起作用

我在我的服务器上安装了清漆,但性能没有改变,http://www.webpagetest.org/说你的服务器上没有启用缓存系统,我使用的是 varnish 的默认配置,这是我的标头:

status: HTTP/1.1 200 OK
Server: Apache  
X-Powered-By:   PHP/5.3.29  
P3P:    CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"  
Expires:    Mon, 1 Jan 2001 00:00:00 GMT    
Cache-Control:  no-store, no-cache, must-revalidate, post-check=0, pre-check=0  
Pragma: no-cache    
Set-Cookie: 73ab794b527721e09d2124da5815cf79=2f8ca1fed15724e75f5bf3824a26a9cd; path=/; HttpOnly 
Last-Modified:  Thu, 25 Sep 2014 08:28:53 GMT   
Content-Type:   text/html; charset=utf-8    
Content-Length: 77965   
Accept-Ranges:  bytes   
Date:   Thu, 25 Sep 2014 08:28:53 GMT   
X-Varnish:  1531877383  
Age:    0   
Via:    1.1 varnish 
Connection: close

答案1

我将看看我是否能为以后对这个问题的看法提供帮助,有许多因素会导致 Varnish 无法缓存内容。您需要解决所有这些问题,并希望有一个良好的日志记录/指标设置,以便您可以识别哪些页面/资源没有从缓存中响应。

您的缓存控制标头是:

status: HTTP/1.1 200 OK
Server: Apache  
X-Powered-By:   PHP/5.3.29  
P3P:    CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"  
Expires:    Mon, 1 Jan 2001 00:00:00 GMT    
Cache-Control:  no-store, no-cache, must-revalidate, post-check=0, pre-check=0  
Pragma: no-cache    
Set-Cookie: 73ab794b527721e09d2124da5815cf79=2f8ca1fed15724e75f5bf3824a26a9cd; path=/; HttpOnly 
Last-Modified:  Thu, 25 Sep 2014 08:28:53 GMT   
Content-Type:   text/html; charset=utf-8    
Content-Length: 77965   
Accept-Ranges:  bytes   
Date:   Thu, 25 Sep 2014 08:28:53 GMT   
X-Varnish:  1531877383  
Age:    0   
Via:    1.1 varnish 
Connection: close

要使这个特定的请求可缓存,你需要修复:

  • Expires: Mon, 1 Jan 2001 00:00:00 GMT

    这告诉 Varnish 不要缓存

  • Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

    这告诉 Varnish 不要缓存(Varnish 4+、Varnish 3 仍会缓存)

  • Set-Cookie: 73ab794b527721e09d2124da5815cf79=2f8ca1fed15724e75f5bf3824a26a9cd; path=/; HttpOnly

    Varnish不会缓存任何使用Set-Cookie的响应

为了解决指标/日志记录问题,以便您可以查看所有请求,我写了有关 Varnish 设置选项的内容:https://www.section.io/varnish-install-quick-and-detailed/

答案2

你的问题在这里:

缓存控制:无存储,无缓存...

基本上:

  • 下一次查找失败(Varnish 不会将响应存储在缓存中)
  • 浏览器不会缓存响应,因此任何 F5 都会再次从您的服务器请求资源。

在你的 VCL 中使用下面的内容

sub vcl_fetch {  

remove beresp.http.Cache-Control;

  set beresp.http.Cache-Control = "public";

}

答案3

我在使用 PHP-FPM 的 ubuntu 服务器上遇到了这个问题:

Expires:    Mon, 1 Jan 2001 00:00:00 GMT    
Cache-Control:  no-store, no-cache, must-revalidate, post-check=0, pre-check=0  
Pragma: no-cache

问题出在/etc/php/7.1/fpm/php.ini(PHP-FPM)中的 session.cache_limiter

sed -i "s/session.cache_limiter = nocache/session.cache_limiter = ''/" /etc/php/7.1/fpm/php.ini

要解决的其他问题是“SetCookie”,用于测试使用:

vcl 4.0;

backend default {
    .host = "127.0.0.1";
    .port = "8181";
}

sub vcl_recv {
    unset req.http.cookie;
    return(hash);
}

sub vcl_backend_response {
    unset beresp.http.set-cookie;
    set beresp.ttl = 30m;
}

sub vcl_deliver {
}

我遗漏的另一件事是a2enmod proxy_httpApache2 中的 ProxyPass“

相关内容