我正在使用带有微缓存的 nginx 1.8.1 来缓存一些 php 请求,/dev/shm
并且它运行良好,但是,当我重新启动服务器时,缓存的文件消失了(显然),但 nginx 仍然引用共享内存中的那些文件(它不应该在重新启动时消失吗?)。
所以发生的情况是,如果我请求一个之前缓存的页面,它会显示错误 500 并给我一个空的答复。
如果我让 nginx 缓存一些页面,然后手动删除物理缓存文件,也会发生同样的情况。
我必须重新加载 nginx 才能使其再次工作。
我认为,如果 nginx 找不到缓存文件,它会创建一个新的缓存文件。这会发生吗?我是否必须在手动删除缓存文件后始终重新加载 nginx?
如果 nginx 找不到缓存文件,有没有办法让它自动重新创建该文件?
相关代码:
fastcgi_cache_path /dev/shm levels=1:2 use_temp_path=off keys_zone=mcache:16m inactive=600s max_size=512m;
并且:
fastcgi_keep_conn on;
fastcgi_connect_timeout 20s;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
fastcgi_cache_lock on;
fastcgi_cache_use_stale timeout updating;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache mcache;
fastcgi_cache_valid 200 301 302 5s;
fastcgi_cache_valid 403 404 5m;
add_header X-Proxy-Cache $upstream_cache_status;
我有:
sendfile off;
但我仍然需要重新加载(重启无法解决问题)nginx 来重新生成缓存。我正在 vultr 2Gb vm 上测试这个。
答案1
我找到答案了:)
在我的代码上:
fastcgi_cache_path /dev/shm levels=1:2 use_temp_path=off keys_zone=mcache:16m inactive=600s max_size=512m;
具体来说这一部分:
use_temp_path=off
我删除该部分并保留默认设置后,它就可以正常工作了。这是因为,当你关闭它时,它会temp
在缓存目录中创建一个文件夹,当你清除缓存时,这个文件夹不应该被删除。
当我这样做的时候:
rm -rf /dev/shm/*
缓存消失了,但临时文件夹也消失了……因此,nginx 无法使用它来重新生成新的缓存文件。如果你保留默认设置(临时文件夹将位于其他地方),即使我删除所有缓存,它仍会按预期工作。