Nginx缓存加载进程退码0且缓存目录为空问题求助
Nginx缓存目录为空及缓存加载进程日志问题解答
关于缓存加载进程的疑问
- 缓存加载进程本来就应该在Nginx启动完成后退出,你的日志显示它
exited with code 0,这是正常状态——因为初始缓存目录为空,它顺利完成了“加载空元数据”的任务,完全不需要担心这个进程的退出问题。
缓存目录为空的原因分析及解决办法
结合你的Nginx配置,核心问题是缓存配置和请求处理逻辑不匹配,导致缓存从未被触发写入:
静态资源未启用缓存
你的location ~* \.(js|css|png|jpg|jpeg|gif|ico)$块完全没有缓存相关配置,这类高频静态资源是缓存的核心对象,但当前配置下不会被写入缓存目录。需要补充缓存规则:location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { proxy_cache MyCache; proxy_cache_valid any 30m; expires max; log_not_found off; add_header X-Proxy-Cache $upstream_cache_status; }PHP请求的缓存配置错误
你在location ~ \.php$块里同时混用了proxy_cache和fastcgi_pass:proxy_cache是用于HTTP反向代理场景的缓存,而fastcgi_pass是直接对接PHP-FPM的FastCGI代理,两者逻辑冲突。如果要缓存PHP生成的动态内容,必须改用fastcgi_cache:# 先在http块添加FastCGI缓存路径(和proxy_cache_path逻辑一致) fastcgi_cache_path /data/cache/nginx/fastcgi keys_zone=PhpCache:10m levels=1:2 inactive=60m max_size=5g; # 再修改PHP请求的location块 location ~ \.php$ { include fastcgi_params; fastcgi_cache PhpCache; fastcgi_cache_valid any 30m; fastcgi_intercept_errors on; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; add_header X-Proxy-Cache $upstream_cache_status; }根location的缓存配置多余
你的location /里配置了proxy_cache,但同时用try_files直接读取本地文件和触发PHP请求——这里的proxy_cache不会生效,因为try_files优先命中本地资源,完全不会走反向代理逻辑,直接移除该location下的proxy_cache相关配置即可。验证缓存生效的方法
访问网站后,查看响应头的X-Proxy-Cache字段:HIT:命中缓存MISS:未命中,本次请求后会写入缓存BYPASS:跳过缓存
也可以直接查看缓存目录内容:
ls -R /data/cache/nginx
总结
- 缓存加载进程退出是正常行为,无需额外处理。
- 修正静态资源和PHP请求的缓存配置逻辑后,缓存目录会逐步生成对应的缓存文件。
内容的提问来源于stack exchange,提问作者Loizm
相关产品推荐
相关产品推荐

