一、缓存类型
二、代理缓存配置语法
2.1、代理缓存路径
-
path 缓存文件路径
-
levels 设置缓存文件目录层次;levels=1:2 表示两级目录
-
keys_zone 设置缓存名字和共享内存大小
-
inactive 在指定时间内没人访问则被删除
-
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
2.2、配置代理缓存
2.3、缓存过期时间
2.4、缓存的维度
三、示例
upstream imooc {
server 192.168.11.135:8001;
server 192.168.11.135:8002;
server 192.168.11.135:8003;
}
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_cache imooc_cache;
proxy_pass http://imooc;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
-
proxy_cache_path /etc/nginx/cache: 存放缓存文件的目录
-
levels=1:2: 目录分级,按照两层目录的方式来进行分级。
-
keys_zone=imooc_cache:10m: zone空间的名字,后面配置 proxy_cache 后面配的就是这个名字。10m表示开辟key空间的大小, 一般1m大概能存放8000个key。
-
max_size=10g: 表示缓存目录最大是多大,不能让缓存无限增长占满整个磁盘。当缓存空间满了后,Nginx就会触发淘汰规则,把不常访问的就会淘汰掉。
-
inactive=60m: 这个60m是时间单位,表示60分钟, 表示如果在60分钟内如果某个缓存没有被访问过,就会把它清理掉 。
-
use_temp_path=off:这个是用来存放临时文件的, 建议关闭,如果打开的话,Nginx会另外建立一个目录和cache目录两个目录在更新缓存时容易出现一些性能方面的损耗。
-
proxy_cache imooc_cache : 表示我们已经 开启了代理缓存 ,该值是proxy_cache_path中的 keys_zone 的值,如果不想使用代理缓存,将该值配置成 off。
-
proxy_pass http://imooc: 代理的地址
-
proxy_cache_valid 200 304 12h;: 状态码为200,304的响应过期时间为 12h。
-
proxy_cache_valid any 10m;: 除了200和304状态码的其它状态码的缓存时间为10分钟。
-
proxy_cache_key $host$uri$is_args$args;: 设置默认缓存的key。
-
add_header Nginx-Cache "$upstream_cache_status";: 增加一个http响应头信息,Nginx-Cache, 告诉客户端是否已经命中代理缓存 。
-
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;: 当我们的后端其中一台服务器出现错误,超时,或者500,502,503,504等不正常的头返回时,就跳过这一台,去访问下一台。避免因为单台服务器的异常对前端产生影响。
server {
listen 8001;
server_name 127.0.0.1;
location / {
root /home/testzq/app/code1;
index index.html;
}
}
<html>
<head>
<meta charset="utf-8">
<title> server 1</title>
</head>
<body>
<h1>server 1</h1>
</body>
</html>
server {
listen 8002;
server_name 127.0.0.1;
location / {
root /home/testzq/app/code2;
index index.html;
}
}
<html>
<head>
<meta charset="utf-8">
<title> server 2</title>
</head>
<body>
<h1>server 2</h1>
</body>
</html>
server {
listen 8003;
server_name 127.0.0.1;
location / {
root /home/testzq/app/code3;
index index.html;
}
}
<html>
<head>
<meta charset="utf-8">
<title> server 3</title>
</head>
<body>
<h1>server 3</h1>
</body>
</html>
nginx -t -c /etc/nginx/nginx.conf # 测试配置文件语法
nginx -s reload -c /etc/nginx/nginx.conf # 重新加载配置项
四、清理指定缓存
五、缓存命中分析
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$upstream_cache_status"';
awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f", hit/NR}' /var/log/nginx/proxy_cache_access.log
命令解释:文章来源地址https://www.toymoban.com/news/detail-768371.html
-
$NF : 日志每行的最后一个参数。
-
hit:我们自定义的一个变量,用来记录被命中的次数。
-
NR:AWK的内置变量,表示本次分析所扫描日志的总行数。
文章来源:https://www.toymoban.com/news/detail-768371.html
到了这里,关于14、Nginx---缓存服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!