我们正在使用带有文件缓存的 nginx:
http {
open_file_cache max=10000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 4;
open_file_cache_errors off;
}
然后,当 FS 上存在一个文件时,我们希望显示 503 维护错误页面,配置如下:
server {
root /var/www/html/public;
location / {
if (-f /var/www/html/storage/framework/down) {
return 503;
}
}
}
问题是该文件从 FS 中删除后会出现延迟;503 仍会返回一段时间(可能是几分钟),可能是因为 open_file_cache 对其进行了缓存。
是否可以open_file_cache
针对特定文件(文件位于服务器根目录之外)禁用它,而对文件系统的其余部分启用它?或者,当我们在框架中打开网页后不需要延迟时,我们有哪些选择(仅删除该一个文件)。我们正在使用 Laravel 及其up
命令down
。
答案1
仅通过 NGINX 配置可能无法解决这个问题。即使您能够禁用单个维护检查文件的打开文件缓存,从性能角度来看,这样做可能也不值得。想想这个文件会如何在每次请求时不断被重新检查,一遍又一遍……这可不是什么好事。
在打开或关闭维护后,您可能最终会使用systemctl reload nginx
来清除所有打开的文件缓存。这很有意义。假设维护是为了更新/添加/删除某些文件而进行的,那么您需要清除整个打开的文件缓存,而不仅仅是维护文件。
最后,作为将打开文件缓存放在整个站点上并systemctl reload nginx
在运行维护启用/禁用命令后使用的替代方法,您可以简单地找到静态文件所在的位置,并创建必要的location
s 并仅在那里启用打开文件缓存(在级别上禁用http
)。