nginx:禁用特定文件的 open_file_cache

nginx:禁用特定文件的 open_file_cache

我们正在使用带有文件缓存的 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在运行维护启用/禁用命令后使用的替代方法,您可以简单地找到静态文件所在的位置,并创建必要的locations 并仅在那里启用打开文件缓存(在级别上禁用http)。

相关内容