![Nginx 打开文件缓存](https://linux22.com/image/608888/Nginx%20%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%E7%BC%93%E5%AD%98.png)
我注意到 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_cache
的inactive
参数)或重新验证(open_file_cache_valid
)时,文件描述符信息会分别被删除(下次打开时将保持最新)或更新。
此行为特定于每个文件系统,这就是为什么建议不要在 NFS 上使用文件描述符缓存。