给站点加 Nginx 缓存,最容易踩的坑不是不会配,而是配完了不知道有没有生效。判断标准只有一个:X-Cache-Status 这个响应头到底返回什么。
三层配置,缺一层就白配
第一层是缓存空间本身,写在 http 段里:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=site:64m max_size=2g inactive=60m use_temp_path=off;
第二层是缓存键,决定什么请求算"同一个页面"。默认用 $scheme$proxy_host$request_uri 就够了,但如果站点有移动端和桌面端两套模板,必须把设备标识加进键里,否则手机访问会拿到 PC 页面的缓存。
第三层是缓存策略,写在 location 里:
proxy_cache site;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
命中率低的三个常见原因
- 响应带 Set-Cookie。Nginx 默认不缓存带 Set-Cookie 的响应。如果后端每个页面都塞会话 Cookie,缓存会全部失效。解决办法是在
proxy_ignore_headers Set-Cookie;的同时,用proxy_hide_header Set-Cookie;把 Cookie 挡在缓存之外。 - 请求带 Cookie 或 Authorization。默认情况下这类请求直接绕过缓存。对纯展示页面,可以
proxy_cache_bypass加白名单,只让登录态请求穿透。 - Vary 头。后端返回
Vary: User-Agent时,每个 UA 都是一份独立缓存,命中率自然低。
怎么验证
连续请求同一地址两三次,看响应头:第一次 MISS,第二次 HIT,说明生效;一直 BYPASS 说明有 Cookie 或 Authorization 挡着;一直 MISS 但 upstream_cache_status 为空,多半是没加 add_header。
最后提醒一句:缓存只对 GET 且默认只对 200/301/302 生效,后台、购物车、用户中心这类动态路径一定要单独 proxy_cache off;,否则会出现"换个账号看到别人数据"的事故。
相关阅读
- 使用IMG2KVM快捷为Proxmox导入IMG镜像img2kvm是一个在PVE下导入IMG文件到虚拟机的工具,可以将img文件(含gz的压缩格
- 最新WIN10镜像下载.文件名 cn_windows_10_business_edition
- fail2ban 防暴力破解实战:让扫描器无处下手
- VPS 怎么选?国内外主机、线路与配置全解析(2025版)





还没有评论,来说两句吧...