fastcgi_cache_path的目录结构由levels参数控制,按哈希值自动分层建目录以避免inode瓶颈;必须显式配置levels(如1:2),禁用use_temp_path=off,并确保缓存路径独立可写且权限正确。
fastcgi_cache_path 的目录结构由 levels 参数决定,它不是简单建一个文件夹存所有缓存,而是按哈希值自动分层建目录,核心目的是避免单目录海量文件导致的 inode 性能瓶颈和文件系统卡顿。
levels=1:2 表示两级子目录:第一级取 key 哈希值最后 1 位(16 进制),第二级取后 2 位。例如 key 哈希为 ab12cd34,最终路径是 /cache/a/b1/ab12cd34;若设为 levels=2:2:2,则生成三级目录,如 /cache/ab/cd/34/ab12cd34。
缓存根目录不能复用系统临时路径(如 /tmp、/dev/shm),尤其在宝塔、phpEnv 等环境中,这些路径常受 SELinux 上下文、挂载选项(noexec、nosuid)或权限隔离限制,导致缓存静默失败——Nginx 不报错,但 X-FastCGI-Cache 始终显示 MISS 或 BYPASS。
/www/server/nginx/cache/fastcgi,phpEnv 用 /www/phpenv/nginx/fastcgi_cache
chown -R www:www /www/server/nginx/cache/fastcgi
默认情况下 Nginx 先写临时文件再 rename 到目标路径,而 use_temp_path=off 强制跳过临时中转,直接写入最终缓存位置。这能规避 /tmp 满、权限不足、磁盘配额超限等常见写入失败场景。
use_temp_path=off,否则即使目录权限正确,也可能因临时路径问题导致缓存不落地keys_zone 使用,元数据与实体文件路径解耦,不影响 keys_zone 内存管理逻辑max_size 是硬上限,达到后 Nginx 会按 LRU 清理最久未访问的缓存文件;inactive 是软策略,指定缓存项若在设定时间内未被命中(注意:不是“过期”,而是“冷数据”),就从 keys_zone 中移除其元数据,并在下次清理周期删除对应文件。