Nginx的open_file_cache

我注意到open_file_cache有一个有趣的问题。 基本上,我有一个Perl脚本更新页面。 我注意到,在这个页面上的open_file_cache将保持不变,我认为是open_file_cache_valid设置。 这似乎是不应该发生的,因为Nginx的文档指出caching只存储这个信息:

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

打开文件描述符,信息的大小和修改时间; 关于目录的信息 search文件时的错误信息 – 无文件,无权读取等。另请参见open_file_cache_errors

整个页面看起来像caching除了修改时间等?

以下是我所看到的以下设置的详细信息:

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

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

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

Nginx并没有更新这个页面,并且它在60秒内保持不变:

Last-Modified:Wed,27 Mar 2013 16:19:46 GMT

一分钟后,我刷新,它终于改变。 这个文件没有其他的caching设置,所以open_file_cache字面上只是caching整个事情? 我可以减lessopen_file_cache_valid或者达到目的吗?

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

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

在caching失效( open_file_cacheinactive参数)或重新确认( open_file_cache_valid )时,文件描述符信息分别被移除(在下次打开时将是最新的)或更新。

这种行为是特定于每个文件系统的,这就是为什么在NFS上使用文件描述符caching的原因之一 。