Nginx之页面缓存

作者 : 开心源码 本文共3368个字,预计阅读时间需要9分钟 发布时间: 2022-05-12 共295人阅读

时间过得飞快,不知不觉已经大年初二,今天总结一下nginx页面缓存

nginx在web应使用上的占使用率越来越高,其带的板块也越来越来。nginx_cache算是一个,虽和专业的cache工具相比略逊一筹,但毕竟部署简单,不使用另装软件和资源开销,所以在web cache中也占了比重不小的一席

1.指令proxy_cache_path

默认值:None

用字段:http

指令指定缓存的路径和少量其余参数,缓存的数据存储在文件中,并且用代理商url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数

例如:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

文件名相似于:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

levels指定目录结构,可以用任意的1位或者2位数字作为目录结构,如 X, X:X,或者X:X:X 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三级目录。

所有活动的key和元数据存储在共享的内存池中,这个区域使用keys_zone参数指定。one指的是共享池的名称,10m指的是共享池的大小。

注意每一个定义的内存池必需是不重复的路径,例如:

proxy_cache_path /data/nginx/cache/one levels=1 keys_zone=one:10m;proxy_cache_path /data/nginx/cache/two levels=2:2 keys_zone=two:100m;proxy_cache_path /data/nginx/cache/three levels=1:1:2 keys_zone=three:1000m;

假如在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。一个名为cache manager的进程控制磁盘的缓存大小,它被使用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出max_size指定的值之后,超过其大小后最少用数据(LRU替换算法)将被删除。内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,如FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节。

2.proxy_cache

语法:proxy_cache zone_name;

默认值:None

用字段:http, server, location

设置一个缓存区域的名称,一个相同的区域可以在不同的地方用。

在0.7.48后,缓存遵循后台的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”头部字段,0.7.66版本以后,”Cache-Control:“private”和”no-store”头同样被遵循。nginx在缓存过程中不会解决”Vary”头,为了确保少量私有数据不被所有的使用户看到,后台必需设置 “no-cache”或者者”max-age=0”头,或者者proxy_cache_key包含使用户指定的数据如$cookie_xxx,用cookie的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值以便分开私有数据和公有数据。

缓存指令依赖代理商缓冲区(buffers),假如proxy_buffers设置为off,缓存不会生效。

3.proxy_cache_valid

1>语法:proxy_cache_valid reply_code [reply_code …] time;

默认值:None

用字段:http, server, location

为不同的应答设置不同的缓存时间,例如:

proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;

为应答代码为200和302的设置缓存时间为10分钟,404代码缓存1分钟。

假如只定义时间:

proxy_cache_valid 5m;

那么只对代码为200, 301和302的应答进行缓存。

同样可以用any参数任何应答。

proxy_cache_valid 200 302 10m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;

2>.定义一个简单nginx缓存服务器:

创立/Users/tenlu/learn/nginxcache_dir和/Users/tenlu/learn/nginxcache_temp

编辑文件: /usr/local/etc/nginx/vhost/itech8.conf

Nginx之页面缓存

编辑文件:如图片所示 /usr/local/etc/nginx/vhost/itech8.conf

proxy_temp_path /Users/tenlu/learn/nginxcache_temp;

proxy_cache_path /Users/tenlu/learn/nginxcache_dir levels=1:2 keys_zone=nginxcache:20m max_size=1g;

upstream webservers {

server 127.0.0.1:83 weight=3;

server 127.0.0.1:88 weight=2;

}

server {

listen 82;

server_name localhost;

set $htdocs /usr/local/var/www/project/dny8_resume;

#添加两头部

add_header X-Via $server_addr;

add_header X-Cache $upstream_cache_status;

location / {

root $htdocs;

autoindex on;

index index.php index.html;

if (!-e $request_filename){

rewrite ^/(.*) /index.php?$1 last;

}

proxy_pass http://webservers;

proxy_set_header X-Real-IP $remote_addr;

proxy_cache nginxcache;

proxy_cache_valid 200 10m;

}

location ~ .php$ {

include fastcgi_params;

fastcgi_index index.php;

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME $htdocs$fastcgi_script_name;

}

}

3>浏览器访问localhost:82 触发proxy_cache

Nginx之页面缓存

proxy_cache

其中变量说明如下:

$server_addr

服务器地址,在完成一次系统调使用后可以确定这个值,假如要绕开系统调使用,则必需在listen中指定地址并且用bind参数。

$upstream_cache_status表示资源缓存的状态

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

HIT 缓存命中

EXPIRED -expired缓存已经过期请求被传送到后台

UPDATING – expired 因为proxy/fastcgi_cache_use_stale正在升级,将用旧的应答。

STALE – expired 因为proxy/fastcgi_cache_use_stale,后台将得到过期的应答。

HIT 命中

4>查看缓存目录

TenludeMacBook-Air :: ~/learn/nginxcache_dir ? ls

3 4 7 e

tenludeMacBook-Air :: ~/learn/nginxcache_dir ? pwd

/Users/tenlu/learn/nginxcache_dir

4. 图片/jss/css缓存

#图片缓存时间设置

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 10d;

}

#JS和CSS缓存时间设置

location ~ .*.(js|css)?$

{

expires 1h;

}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Nginx之页面缓存

发表回复