Nginx作为缓存服务
缓存类型
(1) 服务器缓存
服务端缓存一般使用Memcache、Redis
(2)代理缓存
(3)客户端缓存
代理缓存流程图
第一步:客户端第一次向Nginx请求数据a;
第二步:当Nginx发现缓存中没有数据a时,会向服务端请求数据a;
第三步:服务端接收到Nginx发来的请求,则返回数据a到Nginx,并且缓存在Nginx;
第四步:Nginx返回数据a给客户端应用;
第五步:客户端第二次向Nginx请求数据a;
第六步:当Nginx发现缓存中存在数据a时,则不会请求服务端;
第七步:Nginx把缓存中的数据a返回给客户端应用。
配置语法
proxy_cache_path配置语法
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_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Contex: http
proxy_cache配置语法
- Syntax: proxy_cache zone | off;
- Default: proxy_cache off;
- Context: http, server, location
proxy_cache_valid配置语法
- Syntax: proxy_cache_valid [code ...] time;
- Default: —
- Context: http, server, location
proxy_cache_key配置语法
- Syntax: proxy_cache_key string;
- Default: proxy_cache_key $scheme$proxy_host$request_uri;
- Context: http, server, location
案例演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | upstream imooc { server 192.168.1.112:8001; server 192.168.1.112:8002; server 192.168.1.112:8003; } #需要首先配置 缓存目录,文件目录层级2级,空间名字 10m大小,目录最大大小(超过启动nginx自己的淘汰规则),在60分钟的时间内没有被访问就会被清理,存放临时文件 proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost jeson.t.imooc.io; location / { proxy_cache off; #开启缓存,imooc_cache对应上面keys_zone=imooc_cache:10m ;关闭off proxy_pass http: //imooc; proxy_cache_valid 200 304 12h; #200和304头信息过期时间12小时 proxy_cache_valid any 10m; #其他过期时间10分钟 proxy_cache_key $host$uri$is_args$args; #定义缓存的key 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; } } |
清理缓存的内容
1 2 | cd /opt/app/cache rm * ./ -rf |
让部分请求不缓存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | upstream imooc { server 192.168.1.112:8001; server 192.168.1.112:8002; server 192.168.1.112:8003; } #需要首先配置 缓存目录,文件目录层级2级,空间名字 10m大小,目录最大大小(超过启动nginx自己的淘汰规则),在60分钟的时间内没有被访问就会被清理,存放临时文件 proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost jeson.t.imooc.io; #如果url中包含以下路径参数,那么 cookie_nocache 的值为1 if ($request_uri ~^/(url3|login|register|password\/reset)){ set $cookie_nocache 1; } location / { proxy_cache off; #开启缓存,imooc_cache对应上面keys_zone=imooc_cache:10m ;关闭off proxy_pass http: //imooc; proxy_cache_valid 200 304 12h; #200和304头信息过期时间12小时 proxy_cache_valid any 10m; #其他过期时间10分钟 proxy_cache_key $host$uri$is_args$args; #定义缓存的key add_header Nginx-Cache "$upstream_cache_status" ;#增加一个头信息 #部分不设置缓存 cookie_nocache上面配置的参数, cookie_nocache不为0或者空 那么是不会进行缓存的 proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authorization; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 一个服务报错请求下一个 include proxy_params; } } |
大文件分片请求
优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他的请求不受到影响
缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽的情况。
语法
- syntax:slice size;
- Default:slice 0;
- Context:http,server,location
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理