当我删除缓存时,nginx 返回错误 500

当我删除缓存时,nginx 返回错误 500

我正在使用带有微缓存的 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 无法使用它来重新生成新的缓存文件。如果你保留默认设置(临时文件夹将位于其他地方),即使我删除所有缓存,它仍会按预期工作。

相关内容