Nginx 打开文件缓存

Nginx 打开文件缓存

我注意到 open_file_cache 有一个有趣的问题。基本上,我有一个更新页面的 perl 脚本。我注意到,使用 open_file_cache 后,此页面上的值将保持不变,我假设这是 open_file_cache_valid 设置的持续时间。这似乎不应该发生,因为 Nginx 文档指出缓存仅存储此信息:

http://wiki.nginx.org/HttpCoreModule#open_file_cache

打开文件描述符,其大小和修改时间信息;目录存在的信息;搜索文件时的错误信息 - 没有文件、没有读取权限等。另请参阅 open_file_cache_errors

除了修改时间等之外,似乎整个页面都被缓存了?

以下是我使用以下设置后看到的详细信息:

open_file_cache max=1000 inactive=60s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors 开启;

我运行 perl 脚本来更新页面,并使用 ls 查看文件:

ls -lh index.html -rw-r--r-- 1 apache apache 81K 3月27日 12:32 index.html

但是 Nginx 不会更新页面,并且页面会在 60 秒内保持不变:

最后修改时间:2013 年 3 月 27 日星期三 16:19:46 GMT

一分钟后,我刷新了一下,它终于变了。此文件没有其他缓存设置,那么 open_file_cache 真的只是缓存了整个文件吗?我可以将 open_file_cache_valid 降低到更低吗?或者这样做会违背目的吗?

答案1

这不是 nginx 缓存文件内容,这是您的文件系统(Unix?)在您更新文件时更改 inode。

由于文件描述符信息缓存在 nginx 中,inode 更新不会传播给它,因此继续读取旧的 inode。

当缓存失效(open_file_cacheinactive参数)或重新验证(open_file_cache_valid)时,文件描述符信息会分别被删除(下次打开时将保持最新)或更新。

此行为特定于每个文件系统,这就是为什么建议不要在 NFS 上使用文件描述符缓存

相关内容