首页 > 营销分享 > 使用fastcgi_cache缓存PHP动态页面

使用fastcgi_cache缓存PHP动态页面

我于2012年在某公司开始推进web服务器由apache向nginx的过渡,可以说在制造业电商领域是最早接触nginx的一批人了。这些年来一直在研究如何在节省硬件投入的情况下,提高网站性能表现,提升网站排名。从开发wordpress插件super static cache到后来开发独立的Domai CMS,提升网站性能一直是最重要的工作之一。

对于展示型网站来说,业务逻辑一般较为简单,但大量的网站访问可能会造成数据库查询压力剧增,降低网站的访问速度,一些较为古老的CMS的解决办法直接生产静态页面,这样做的缺点是缓存无法设置过期时间,只能通过手动方式或者编写一些额外的自动化程序去定时更新缓存,长时间不更新的网站页面链接也得不到更新,对优化来说也不够友好。

所以,正如我在其他文章中说的,更科学的缓存策略应该是能够设置到期时间,到期之后能够自动更新。

通过正确配置CDN,当然能够达到这个目的,但CDN缓存服务器众多,不同地区的访客访问时可能都需要回源,加上某些情况下,访问得不到缓存,也可能造成服务器压力增加,如果能够PHP和Web服务器之间增加一个缓存业务层,用户访问时能够根据配置输出或者生成缓存文件,并有能力管理缓存,则能很好的优化此问题。

Nginx的fastcgi_cache就是为解决此问题而生的,下面介绍如何配置开启fastcgi_cache。

fastcgi_cache_path /tmp/ngcache levels=1:2 keys_zone=cgicachezone:200m inactive=5h;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 5h;
fastcgi_cache_methods GET HEAD;
add_header cgi-cache $upstream_cache_status

然后在对应网站server字段中和php通信的fastcgi配置更改成如下配置:

set $skip_cache 0;
if ($request_uri ~* "(/*-admin/|/admin/)") {
        set $skip_cache 1;
}

location ~ \.php($|/) {
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PHP_VALUE open_basedir=$document_root:/tmp;
  fastcgi_pass 你的php-sock地址
  fastcgi_index index.php;
  
  fastcgi_cache cgicachezone;
  fastcgi_no_cache $skip_cache;
}

然后重启nginx,fastcgi_cache即可工作,可以通过查看http响应字段是否含有cgi-cache来查看fastcgi_cache工作状态。

结论:

fastcgi_cache是由nginx提供的在nginx和fastcgi服务之间的一层缓存层,它可以帮助显著降低数据库查询和程序运行压力。

通过使用fastcgi_cache,可以帮助提高PHP网站的访问速度,它可以完美替代PHP网站的静态网页生成功能。

注意:

fastcgi_cache配置选项较多,网上的教程也不少,这里不在赘述具体配置选项的功能。

以上配置实例仅供参考,实际上每个服务器环境,网站功能也各不相同,无法给出通用配置,具体配置,读者可自行研究,也可加我微信探讨。

上一篇: 80%的网站 Cloudflare设置都不对 下一篇:
148人阅读过这篇文章,2人喜欢。

发表评论

评论列表