proxy_cache_fastcgi_cache_lua
<p>[区别] 网上照搬<br>proxy_cache 缓存后端服务器的内容,可以是动态或者静态的任何内容<br>fastcg_cache 缓存fastcgi生成的内容,很多情况是php生成的内容<br>proxy_cache 主要用于反向代理时,对后端内容原服务器进行缓存,减少了nginx与后端通信的次数,节省了传输时间和后端带宽<br>fastcgi_cache 主要用于对fastcgi的动态进程进行缓存,减少了nginx和php通信的次数,减轻了php和数据库的压力<br> 先来proxy_cache 针对lua<br> levels:缓存的级别,哈希 keys_zone:共享内存区 inactive:一个请求60m没有被请求,那么缓存管理会自动删除 (有了这个感觉不用purge了)<br> proxy_cache_path /dev/shm/proxy_cache levels=1:2 keys_zone=one_cache:100m inactive=60m;<br> fastcgi_cache_path /dev/shm/fastcgi_cache_${USER}-${PRJ_KEY}-${APP_SYS} levels=1:2 keys_zone=Action_pk_gift-fcgi-cache_${USER}-${PRJ_KEY}-${APP_SYS}:100m inactive=60m;</p>
#这个清理模块要写在上面,也是看别人说的,我太懒了 不想实验了
location ~ /purge/ajax_gift_gifts_get{
allow all;
#deny all;
proxy_cache_purge one_cache "$host$arg_roomid$arg_rid$http_origin";
}
location = /ajax_gift_gifts_get{
add_header X-Cache-Status “$upstream_cache_status - $upstream_response_time”;
#根据key生成相应的缓存 可以通过$arg_参数名,来访问到参数,然后可以设置根据参数不同来指定你想要的缓存条件
proxy_cache_key "$host$arg_roomid$arg_rid$http_origin";
#允许哪些方法可以缓存
proxy_cache_methods GET HEAD;
#缓存存放的缓存快
proxy_cache one_cache; #这个one_cache 是上面定义proxy_cache_path 时里面定义的共享内存区
#对于任何响应都缓存 30s
proxy_cache_valid any 30s;
# 请求几次开始缓存
proxy_cache_min_uses 1;
#客户端主动断掉链接,Nginx会等待后端处理完(或超时),然后记录后端的返回信息
proxy_ignore_client_abort on;
add_header Host ${DOMAIN_GATE};
# 当多个客户端请求一个不存在的缓存时,只有第一个请求被允许发送至服务器
proxy_cache_lock on;
# 哪些状态要缓存
proxy_cache_use_stale error updating timeout http_500 http_503;
#proxy_cache 和 proxy_pass 必须一起用才可以了,我是代理到另一个接口了,网上看 有人写127.0.0.1:port 我没成功,这个必须得写可以访问的通的server_name 自己到时候慢慢试吧
proxy_pass http://${DOMAIN_GATE}/ajax_gift_gifts_getinside;
}
location = /ajax_gift_gifts_getinside{
limit_conn mall_one_{USER} 1;
limit_conn_status 403;
limit_req zone=mall_addr_{USER} burst=1 nodelay;
limit_req_status 403;
default_type application/json;
content_by_lua_file ${PRJ_ROOT}/src/lua/app/gift.lua;
}
来看fastchi_cache 对php 不能照搬这个 ,环境不一样,参数不一样,变量不一样
location /pk_gift {
#这里重新整理参数
set $paramstr $uri?groupid=$arg__groupid;
try_files $uri /localcache$paramstr;
}
location ~ ^/localcache/(w+) {
internal;
#解析action,/xxx => action=xxx
set $action 'index';
if ( $request_uri ~ ^/(w+)[^?]* ) {
set $action $1;
}
include fastcgi_params;
root ${PRJ_ROOT}/src/apps/${APP_SYS} ;
fastcgi_pass $php_sock;
fastcgi_param SCRIPT_FILENAME ${PRJ_ROOT}/src/apps/${APP_SYS}/index.php;
fastcgi_param QUERY_STRING do=$action&$query_string;
client_max_body_size 100m;
fastcgi_connect_timeout 1000s;
fastcgi_send_timeout 1000s;
fastcgi_read_timeout 1000s;
#看这里
#这个是给response 头加一个变量看看是否缓存的状态 有MISS:没命中 HIT:缓存命中 EXPIRED:缓存已经过期请求被传送到后端 UPDATING:正在更新缓存,将使用旧的应答 STATE:后端将得到过期的应答
add_header X-Cache-CFC "$upstream_cache_status - $upstream_response_time";
#这个也是根据参数生成相应的缓存key,到时候匹配也是按照这个key来匹配 下面$1是上面正则匹配参数的第一个
fastcgi_cache_key "$host$1$query_string$http_origin";
#允许缓存的方法
fastcgi_cache_methods GET HEAD;
#最上面fastcgi_cache_path 定义的路径里面有
fastcgi_cache Action_pk_gift-fcgi-cache_fangyuanmei-mall-front;
#任何状态缓存30s
fastcgi_cache_valid any 30;
#请求几次开始缓存
fastcgi_cache_min_uses 1;
#同proxy_cache
fastcgi_cache_lock on;
#同proxy_cache
fastcgi_cache_use_stale error updating timeout http_500 http_503;
#同proxy_cache
fastcgi_ignore_client_abort on;
}
哎,图片还不出来