fastcgi_cache是nginx的一个缓存模块,能够将动态页面(例如:PHP)缓存起来,以便用户下次访问时直接返回
它的原理就是,在用户访问网站时,通过将URL及其相关内容生成key,然后对key用md5算法进行hash计算,最终以配置的参数获得缓存文件路径
开始操作
那么接下来,我就直接上代码(注意:以下代码需要根据你原来的配置文件修改)
代码语言:javascript复制# 下面这几条语句可以放在nginx.conf供所有站点使用
# /tmp/cache/zblog 缓存目录:填写自己的目录,权限要给777
# levels 可以就这样
# keys_zone 名称:大小,注意:这里的大小指的是,能够存放的key的字节数的大小。
# 例如:1m=1024*1024字节,就是所有key加起来不能超过这个数
# inactive 缓存文件在一段时间内没有访问则会被删除
# d - 天、h - 小时、m - 分钟
# max_size 设置缓存的总大小:如果是多个站点,可以设置大一点
fastcgi_cache_path /tmp/cache/zblog levels=1:2 keys_zone=zblog:1m inactive=1d max_size=100m;
fastcgi_temp_path /tmp/cache/zblog/tmp; # 需要与fastcgi_cache_path设置的缓存目录在同一分区
fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 生成缓存key
fastcgi_ignore_headers Cache-Control Expires Set-Cookie; # 如果不加,若php返回这些头,缓存可能会失效
server {
...
# 跳过缓存开关,1为跳过缓存,0为不跳过缓存
set $skip_cache 0;
# 不缓存后台目录
if ($request_uri ~* "^/zb_(users|system)") {
set $skip_cache 1;
}
# 动态查询不缓存(可选)
if ($query_string != '') {
set $skip_cache 1;
}
# 登录用户不缓存(可选)
if ($http_cookie ~* "(^|;s*)username(.*?)=(.*?)(;|$)") {
set $skip_cache 1;
}
# 其它选项,请根据自身情况而定
#PHP-INFO-START PHP引用配置,可以注释或修改
#include enable-php-72.conf;
这里应该参考原来的配置。特别是fastcgi_pass参数
location ~ [^/].php(/|$) {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-72.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
fastcgi_cache zblog; # 这个地方要填写上面fastcgi_cache_path的keys_zone参数设置的名称
# 设置需要的状态码以及缓存时间
fastcgi_cache_valid 200 1h;
fastcgi_cache_valid 301 302 10m;
fastcgi_cache_valid 404 1m;
# 用于调试,上线后可以注释掉
# MISS为未命中缓存,HIT为命中缓存
add_header X-Cache "$upstream_cache_status";
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
}
#这个地方是用来清除缓存用的
location ~ ^/purge(/.*)$ {
allow 127.0.0.1;
allow 你的服务器外网ip;
fastcgi_cache_purge zblog "$scheme$request_method$host$1";
}
#PHP-INFO-END
...
}