全书目录

第十七篇:Nginx 完全指南 —— 城市总闸口宇宙

第十章:缓存基础 —— 总闸口旁边的快速取件仓

1 分钟 280 字 第 330 / 962 个阅读单元

缓存是 Nginx 非常强的一项能力。
它本质上是在城市总闸口旁边放一个“快速取件仓”。

先分成两类理解:

text
浏览器缓存:让客户端少重复进城
代理缓存:让总闸口少重复去后方业务区拿货

静态资源常见写法:

nginx
location ^~ /assets/ {
    root /srv/www/site;
    try_files $uri =404;

    expires 30d;
    add_header Cache-Control "public, immutable";
}

这表示:/assets/ 下面的东西,浏览器可以长期缓存。
适合带 hash 文件名的前端构建产物,例如 app.a1b2c3.js

反向代理缓存则是另一种:

nginx
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;
        }
    }
}

请求路径会变成:

text
用户请求 /articles/42
   |
   v
Nginx 先查快速取件仓
   |
   +--> 命中 HIT  -> 直接返回
   |
   +--> 未命中 MISS -> 去后端取一次,再放入缓存

缓存非常适合:

  • 新闻、文章、公共详情页
  • 热门 API 的只读响应
  • 变化不频繁的公共数据

缓存不适合直接无脑上在:

  • 强个性化接口
  • 强实时库存、余额、权限结果
  • 登录后强用户态页面

城市总闸口旁边的快速取件仓很好用,但别把需要实时审批的业务文件也塞进去