nginx实现http的缓存协商缓存

http通过判断资源是否被修改来判断是否使用缓存。

涉及几个请求头参数:

ETag; // 默认是开启的。作用是开启协商缓存

if_modified_since:浏览器缓存记录的该文件的最后服务器修改时间

Cache-Control:配置缓存的细则

复制代码
location / {
            root "D:/work/sourcecode/nginx_html/";
            index  index.html;
            try_files $uri $uri/ /index.html;

            // 开启协商缓存
			etag on;			

            // exact:文件修改的时间和缓存存储的时间要完全符合,还有其他属性,如before等。
			if_modified_since exact ; 

            // 增加缓存控制。no-cache:每次请求前都对资源进行验证是否过期。must-revalidate:可缓存但必须再向源服务器进行确认
			add_header Cache-Control "no-cache,must-revalidate";
}

上面的方法会将全部的资源都会进行缓存,但是在新版本上线时又希望用户能及时看到最新的内容。这种情况下上面的缓存方法就不太适用了,用户体验也不好。

我们可以将静态页面比如html或者根目录进行协商缓存,根目录下面的js、css、图片这种进行强缓存。

复制代码
#子系统目录
location /sub1/ {

            root "D:/work/sourcecode/nginx_html/159/";
            index  index.html;
            try_files $uri $uri/ /sub1/index.html;			
			
            #协商缓存
			add_header Cache-Control "no-cache,must-revalidate";			
}


# 单独为 CSS、js 提供缓存策略(放在 server 块内,与主 location 并列)
location ~ ^/sub1/.+\.(css|js)$ {

            root "D:/work/sourcecode/nginx_html/159/";
            
            #强缓存,36000000秒后过期
            add_header Cache-Control "public,max-age=36000000";   
}
相关推荐
Adellle13 小时前
开发一个简易的RPC框架
网络·网络协议·rpc
饮品爱好者13 小时前
[ 网络 ] NO.1 TCP/IP网络模型
网络·网络协议·tcp/ip
郝学胜-神的一滴14 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建
深念Y14 小时前
DeepSeek/MiMo 推理链缓存代理:从内存到 SQLite 的两级缓存架构实战
数据库·缓存·架构·sqlite·内存·优化·分层
sichuanwww14 小时前
函数缓存lru_cache
缓存·函数缓存·lru_cache
潜创微科技14 小时前
IT68051+IT6615:4K@60Hz HDMI+USB Over IP 网线延长方案|低延时 100 米无损传输
网络·网络协议·tcp/ip
1892280486115 小时前
NQ486固态MT29F16T08GSLDHL8-QM:D
大数据·人工智能·科技·microsoft·缓存
1892280486116 小时前
NQ551固态MT29F16T08EWLEHD6-ITF:E
大数据·服务器·人工智能·科技·缓存
2401_8734794016 小时前
【合规审计】如何记录每次IP查询用于监管报送?IP离线库日志集成操作指南
网络·网络协议·tcp/ip
霞姐聊IT16 小时前
缓存技术:从CPU Cache到AI KV Cache (一)
缓存·性能优化