Nginx是大型架构的核心,下面我重点详解Nginx缓存@mikechen
Nginx缓存
在高并发网站中,80% 的请求是重复内容,例如静态图片、CSS、API结果等。
如果每次请求都要回源到后端应用或数据库,性能必然成为瓶颈,Nginx缓存机制正是为此而生。
用内存与磁盘,换取极致的响应速度。
一句话总结:缓存命中一次,就等于少了一次后端访问。
Nginx缓存工作原理
Nginx提供两类核心缓存机制:
类型 | 说明 | 典型场景 |
---|---|---|
代理缓存(Proxy Cache) | 缓存反向代理后的HTTP响应 | 静态接口、API结果 |
FastCGI缓存(FastCGI Cache) | 缓存动态应用输出(如PHP、Python) | WordPress、PHP网站 |
微缓存(Micro Cache) | 缓存秒级动态响应 | 高频接口(如首页、热榜) |
Nginx缓存的核心机制主要包含三步:
1. 缓存命中判断
当客户端请求到达 Nginx 时,Nginx 会根据请求的 URL、参数、Header 等信息生成缓存 Key。
如果发现本地磁盘已有对应缓存文件,则命中缓存,直接返回结果。
2. 缓存写入机制
当缓存未命中时,Nginx 会将请求转发到后端服务器,等待响应后:
一边将响应返回给客户端,一边将响应内容写入缓存目录
缓存文件路径是通过哈希算法计算得出,保证分布均匀、快速查找。
3. 缓存更新与失效
当文件过期后,Nginx 会,将旧缓存标记为“陈旧”,并发触发一个后台进程重新获取数据。
Nginx缓存案例
案例1:静态资源加速
location /static/ { root /var/www/html; expires 7d; add_header Cache-Control "public"; }
浏览器缓存+Nginx本地缓存结合;
7天内无需重新请求,秒级加载页面;
案例2:接口响应缓存
location /api/news/ { proxy_cache my_cache; proxy_pass http://news_backend; proxy_cache_valid 200 5m; }
热点新闻接口缓存5分钟;
有效减轻后端请求压力;
QPS 提升 3~10 倍;
案例3:动态页面缓存(首页/榜单类)
location = /index.html { proxy_cache my_cache; proxy_pass http://web_backend; proxy_cache_valid 200 10s; }
即便是动态首页,只要 10 秒内更新一次,仍可大幅提升性能。