缓存是 Nginx 非常强的一项能力。
它本质上是在城市总闸口旁边放一个“快速取件仓”。
先分成两类理解:
浏览器缓存:让客户端少重复进城
代理缓存:让总闸口少重复去后方业务区拿货静态资源常见写法:
location ^~ /assets/ {
root /srv/www/site;
try_files $uri =404;
expires 30d;
add_header Cache-Control "public, immutable";
}这表示:/assets/ 下面的东西,浏览器可以长期缓存。
适合带 hash 文件名的前端构建产物,例如 app.a1b2c3.js。
反向代理缓存则是另一种:
http {
proxy_cache_path /var/cache/nginx/content
levels=1:2
keys_zone=content_cache:100m
max_size=2g
inactive=30m
use_temp_path=off;
upstream content_backend {
server 127.0.0.1:4000;
}
server {
listen 80;
server_name content.example.com;
location /articles/ {
proxy_cache content_cache;
proxy_cache_methods GET HEAD;
proxy_cache_valid 200 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status always;
proxy_pass http://content_backend;
}
}
}请求路径会变成:
用户请求 /articles/42
|
v
Nginx 先查快速取件仓
|
+--> 命中 HIT -> 直接返回
|
+--> 未命中 MISS -> 去后端取一次,再放入缓存缓存非常适合:
- 新闻、文章、公共详情页
- 热门 API 的只读响应
- 变化不频繁的公共数据
缓存不适合直接无脑上在:
- 强个性化接口
- 强实时库存、余额、权限结果
- 登录后强用户态页面
城市总闸口旁边的快速取件仓很好用,但别把需要实时审批的业务文件也塞进去。