Nginx学习笔记——场景实践之《缓存服务》

缓存类型

使用缓存,就是为了减少后端的压力。
(1)服务端缓存:Memcached、Redis等。
(2)代理缓存:Nginx、代理、中间件上的缓存。
(3)客户端缓存:浏览器上面的。

代理缓存

在这里插入图片描述

proxy_cache配置语法

先定义缓存路径:

syntax:proxy_cache_path path [levels=levels]
[use_temp_path=on|off] keys_zone=name:size [inactive=time]
[max_size=size] [manager_files=number] [manager_sleep=time]
[manager_shreshold=time] [loader_files=number]
[loader_sleep=time] [loader_threshold=time] [purger=on|off]
[purger_files=number] [purger_sleep=time]
[purger_threshold=time];
Default:默认无
Context:http

定义缓存开关,其中zone为名字

Syntax:proxy_cache zone|off;
Default:proxy_cache off;
Context:http,server,location

缓存过期周期,code表示状态码

Syntax:proxy_cache_valid [code ...] time;
Default:默认无
Context:http,server,location

缓存的维度,缓存的范围(默认:协议+主机+URL)

Syntax:proxy_cache_key string;
Default:proxy_cache_key $scheme$proxy_host$request_uri;
Context:http,server,location

测试配置

同样开启三个端口模拟三台服务器,配置一个代理服务器。

    upstream server-pool{
	server 192.168.174.132:8001;
	server 192.168.174.132:8002;
	server 192.168.174.132:8003;
    }

    proxy_cache_path /opt/app/cache levels=1:2 keys_zone=shen_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost;

    location / {
	proxy_cache shen_cache;
	proxy_pass http://server-pool;
	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;
	include proxy_params;
    }

此处配置了服务池,缓存路径,缓存配置。
注:proxy_next_upstream,配置了当服务器出现后面的情况后,跳转到下一个服务器访问。

效果

当我们访问页面时,发现会访问的是同一个服务器,因为proxy_cache_key是同一个(类似于uri_hash)。
发现/opt/app/cache会有缓存文件。
当我们关闭缓存服务后,再次访问,发现变成轮询访问服务器组。

缓存语法补充

定期清理缓存

方式一:rm -rf 缓存目录内容,清空所有缓存
方式二:第三方扩展模块ngx_cache_purge

部分页面不缓存

Syntax:proxy_no_cache string ...;
Default:默认无
Context:http,server,location

如配置:

    if ($request_uri ~ ^/(url3|login|register|password\/reset)) {
        set $cookie_nocache 1;
    }

    location / {
        proxy_cache shen_cache;
        proxy_pass http://server-pool;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        proxy_no_cache $cookie_nocache $arg_nochace $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;

        add_header Nginx-Cache "$upstream_cache_status";

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        include proxy_params;
    }

其中,proxy_no_cache 后面的项目不为0或者空,则它匹配的网址不进行缓存。
http://XXX/url3.html会进行轮询访问服务器。

大文件分片请求

Syntax:slice size;
Default:slice 0;
Context:http,server,location

把一个大文件,分割成小的片断,分别去请求不同的服务器,形成小的缓存文件。
优势:每个子请求收到的数据都会形成一个独立文件,一个请求断了,其它请求不受影响。
缺点:当文件很大或slice很小的时候,可能会导致文件描述符耗尽等情况。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值