Nginx是大型架构的核心,下面我重点详解Nginx缓存实战@mikechen
Nginx缓存
Nginx 作为高性能的反向代理、与负载均衡服务器,其”缓存功能“在提升 Web 服务响应速度和减轻后端压力方面具有重要作用。

可以,极大的降低后端压力。
比如:大量重复请求(首页、热榜、图片、热门 API),不再回源,节省 CPU、内存。
提升并发能力:当大多数请求命中缓存时,系统能承受更高峰值流量。
Nginx缓存工作机制
Nginx缓存工作原理,如下:

整体流程;
当客户端发起请求时,Nginx 首先检查本地缓存(通常为磁盘或内存);
若命中缓存(cache hit),直接返回缓存内容;
若未命中(cache miss),Nginx 将请求转发至后端服务器,获取响应后将其写入缓存并返回给客户端。
缓存控制
缓存的有效性由响应头(如 Cache-Control、Expires、ETag、Last-Modified)。
以及,和 Nginx 配置(如 proxy_cache_valid、proxy_cache_key)共同决定。
Nginx 可通过配置缓存键、缓存时间和缓存条件来精细控制缓存策略。
Nginx缓存配置
Nginx 支持多种缓存方式,按场景选择组合使用。

1. 静态资源缓存(浏览器 + Nginx)
适合图片、JS、CSS 等:
location /static/ {
root /var/www/html;
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
2.反向代理缓存
适合 API、页面、动静结合场景:
配置:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:200m max_size=30g inactive=60m use_temp_path=off;
server {
location /api/hot/ {
proxy_pass http://backend_pool;
proxy_cache my_cache;
proxy_cache_key "$scheme$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
add_header X-Cache-Status $upstream_cache_status;
}
}
3.秒级缓存
高频但短时容忍一致性损失的接口(热榜、首页):
location /api/top/ {
proxy_cache my_cache;
proxy_cache_valid 200 1s;
proxy_cache_use_stale updating;
}
4.FastCGI Cache
适合 PHP、WordPress 等:
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcg_cache:100m inactive=60m;
server {
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_cache fcg_cache;
fastcgi_cache_key "$scheme$request_method$host$request_uri $cookie_user";
fastcgi_cache_valid 200 302 10m;
add_header X-Fastcgi-Cache $upstream_cache_status;
}
}
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。