Fastcgi_cache特定php,Nginx利用fastcgi_cache缓存php页面

前言

fastcgi_cache是一个nginx的插件,用于缓存fastcgi接口的执行结果,例如缓存php的执行结果。特别是php网站的首页与一些非交互页面,利用fastcgi_cache可以大幅度提升访问速度,并且降低php的执行压力。

配置

1. 在nginx的主配置文件

在主配置文件(nginx.conf)中添加缓存域

fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=cgi_wpcache:200m inactive=1d;

fastcgi_cache_path:缓存文件的路径,/dev/shm/为tmfs缓存文件系统,

实际储存在内存中,所以读写IO性能更高。

levels:缓存目录的结构层次,例如1:2,缓存文件会就生成在指定目录的再下两层目录中。

keys_zone:缓存域名称,在vhost内进行缓存时需要调用。

inactive:缓存不活动时间,若缓存内容在指定时间内未被访问将会被清理出缓存域。

2. 站点配置

location /archives/ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME /data/webroot/$fastcgi_script_name;

include fastcgi_params;

fastcgi_cache cgi_wpcache;

fastcgi_cache_methods GET HEAD;

fastcgi_cache_key $request_method$host$request_uri;

fastcgi_cache_valid 200 2d;

fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

add_header X-Cache “$upstream_cache_status”;

}

fastcgi_cache:指定缓存域

fastcgi_cache_methods:指定缓存的请求方式

fastcgi_cache_key:指定缓存文件的标识,这个标识会MD5转码存储在缓存域的目录下

fastcgi_cache_valid:指定缓存状态,例如上文中只缓存响应状态码为200的请求所产生的返回页面两天

fastcgi_ignore_headers:默认情况下fastcgi_cache会忽略有特殊header的请求,并不进行缓存,官网说明。但当我们添加这个参数后,这些限制将不在存在。

add_header 将会在返回请求的response的header中添加一个X-Cache字段表示是否进行了缓存。如果需要也可以在nginx日志中通过log_format添加$upstream_cache_status字段

·MISS 未命中,请求被传送到后端

·HIT 缓存命中

·EXPIRED 缓存已经过期请求被传送到后端

·UPDATING 正在更新缓存,将使用旧的应答

·STALE 后端将得到过期的应答

3.验证

配置完成后重新加载nginx后通过curl -I 访问如下:

[root@localhost local]# curl -I localhost/archives/1.php

HTTP/1.1 200 OK

Server: nginx/1.14.0

Date: Mon, 25 Jun 2018 06:48:05 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

Vary: Accept-Encoding

X-Powered-By: PHP/7.0.30

Expires: Tue, 26 Jun 2018 06:48:05 GMT

Cache-Control: max-age=86400

X-Cache: MISS

第一次访问 X-Cache: MISS 说明还未进行缓存。

[root@localhost local]# curl -I localhost/archives/1.php

HTTP/1.1 200 OK

Server: nginx/1.14.0

Date: Mon, 25 Jun 2018 06:50:57 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

Vary: Accept-Encoding

X-Powered-By: PHP/7.0.30

Expires: Tue, 26 Jun 2018 06:48:05 GMT

Cache-Control: max-age=86400

X-Cache: HIT

第二次访问发现X-Cache: HIT,表明/archives/1.php这个url已经被缓存,再下次访问nignx将不再会去请求php-fpm进行执行,而会直接从缓存中读取并返回,能够大大提高网站速度。

4. 遇到问题

a)访问空白

配置完毕后发现时常会出现页面访问空白的情况,再清空缓存目录后重新访问就恢复了。

经过测试发现是由于第一次使用HEAD方式访问,返回一个body为空的响应并被缓存了,所以之后再次访问就获取到了空白的页面。

这是由于fastcgi_cache_key中没有设置$request_method,将GET和HEAD的请求存储到了同一个key中。

b)页面缓存失败,一直MISS

默认情况下,请求的header中包含“Expires”, “Cache-Control”, “Set-Cookie”等,页面将不会被缓存,所以添加fastcgi_ignore_headers Cache-Control Expires Set-Cookie;即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值