在使用 CDN 进行缓存优化时,您可能会遇到一个令人头疼的问题:源站的 HTTP 响应头包含一些禁止缓存的指令,例如 Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache。这些头部信息会导致 CDN 无法对内容进行缓存,从而严重影响缓存命中率。
文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
如果源站返回了带有禁止缓存的 HTTP 响应头,CDN 可能会继承这些头部信息,从而导致内容无法被缓存。例如使用军哥的 LNMP环境,在动态页面或伪静态页面中,HTTP 响应头通常包含如下信息:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 Pragma: no-cache
这些头部信息默认是为了防止动态内容被缓存,但在启用 CDN 的情况下,这些指令会直接干扰 CDN 的缓存策略。文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
解决这个问题的核心在于去掉 HTTP 响应头中的 Cache-Control 和 Pragma,而无需修改网站程序的代码。通过调整 PHP 配置即可轻松解决。大多数情况下,这些头部信息是由 PHP 会话(Session)管理机制生成的,特别是与 session.cache_limiter 参数有关。解决方法如下:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
1.修改 PHP 配置文件(php.ini)文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
打开 PHP 的配置文件 php.ini,找到以下配置:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
session.cache_limiter = nocache
将其值改为 none:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
session.cache_limiter = none
2.重启 PHP 服务文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
修改完成后,需要重启 PHP 服务以使配置生效。具体命令如下:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
systemctl restart php-fpm
或者:文章源自堕落的鱼-https://www.duoluodeyu.com/2762.html
service php-fpm restart
如果你使用的LNMP环境,也可以使用:
lnmp php-fpm restart