将 Nginx proxy_cache 目录挂载到 tmpfs(如 /dev/shm/nginx_cache)可实现内存级缓存,小文件响应低至 0.2ms;需单独挂载限大小、配置 use_temp_path=off、合理设置 keys_zone 和 levels,并注意数据易失性与内存监控。

直接把 Nginx 的 proxy_cache 目录挂到 tmpfs(比如 /dev/shm)就能跳过磁盘 I/O,让缓存读写变成内存级操作——小文件命中响应可压到 0.2 ms 以内,写入吞吐也几乎不受限。这不是“调缓存参数”,而是换掉底层存储介质。
第一步:挂载专用 tmpfs 缓存目录
别复用系统默认的 /dev/shm 根目录,单独建子目录并限制大小,避免撑爆内存:
- 创建挂载点:
sudo mkdir -p /dev/shm/nginx_cache - 临时挂载(测试用):
sudo mount -t tmpfs -o size=2G,mode=0755 tmpfs /dev/shm/nginx_cache - 永久挂载(写入
/etc/fstab):tmpfs /dev/shm/nginx_cache tmpfs size=2G,mode=0755 0 0 - 确认权限:Nginx worker 进程用户(如
nginx或www-data)需对目录有读写权:sudo chown nginx:nginx /dev/shm/nginx_cache
第二步:Nginx 配置指向内存路径
在 http 块中定义 cache 路径,关键要关掉临时写入、简化层级、合理分配元数据空间:
proxy_cache_path /dev/shm/nginx_cache levels=2 keys_zone=fast_cache:256m max_size=2g inactive=1h use_temp_path=off;-
use_temp_path=off必须显式关闭——否则响应体先写临时目录再搬移,白白多一次内存拷贝 -
levels=2(即levels=1:1)足够应付千万级缓存项,扁平结构减少路径查找开销 -
keys_zone按每万 URL 占 1–1.5 MB 估算,256 MB 支持约 20 万 key,避免频繁淘汰
第三步:location 中启用并优化缓存行为
针对静态资源或可缓存 API,配合内核零拷贝和连接优化:
- 开启高效传输:
sendfile on; tcp_nopush on; - 禁用 access_log(或设为 buffer 写入),减少上下文切换
- 设置合理过期策略:
proxy_cache_valid 200 302 1d;,避免频繁校验 - 加锁防穿透:
proxy_cache_lock on; proxy_cache_lock_timeout 5s; - 允许 stale 返回:
proxy_cache_use_stale error timeout http_500;
注意事项与边界控制
tmpfs 缓存快但易失,只适合非核心、可重建的场景:
- 重启后缓存全丢——适合 CDN 边缘节点、预构建静态资源、图片缩略图等
- 内存用量需监控:
df -h /dev/shm/nginx_cache,建议预留 20% 余量防 OOM - 不适用于用户上传内容、数据库导出文件等不可再生资源
- 多节点部署时,各实例缓存独立,无共享——这是性能代价,也是架构取舍


















