Apache HTTP Server 版本 2.4
描述 | 在内存中缓存静态文件列表 |
---|---|
状态 | 实验性 |
模块标识符 | file_cache_module |
源文件 | mod_file_cache.c |
mod_file_cache
很容易创建损坏的网站,因此请仔细阅读本文档。缓存 经常请求且变化很少的静态文件是减少服务器负载的一种技术。 mod_file_cache
提供两种缓存经常请求的静态文件的方法。通过配置指令,您可以指示 mod_file_cache
既可以打开然后 mmap()
文件,也可以预先打开文件并保存文件的打开文件句柄。这两种技术都通过在服务器启动时而不是在每次请求期间完成部分工作(特别是文件 I/O)来减少处理这些文件请求时的服务器负载。
注意:您不能使用它来加速 CGI 程序或其他由特殊内容处理程序提供的文件。它只能用于通常由 Apache 核心内容处理程序提供的普通文件。
此模块是 Apache 1.3 中 mod_mmap_static
模块的扩展,并大量借鉴了该模块。
mod_file_cache
通过主服务器配置中的 MMapFile
或 CacheFile
指令缓存静态配置的文件列表。
并非所有平台都支持这两种指令。如果您尝试使用不支持的指令,您将在服务器错误日志中收到错误消息。如果给定不支持的指令,服务器将启动,但文件不会被缓存。在支持这两种指令的平台上,您应该尝试使用这两种指令,看看哪种最适合您。
MMapFile
指令通过系统调用 mmap()
将 mod_file_cache
的静态配置文件列表映射到内存中。此系统调用在大多数现代 Unix 派生系统上可用,但并非在所有系统上都可用。有时系统对可以 mmap()
的文件的大小和数量有限制,实验可能是找出这些限制的最简单方法。
此 mmap()
操作仅在服务器启动或重启时执行一次。因此,每当映射文件之一在文件系统上发生更改时,您必须重启服务器(请参阅 停止和重启 文档)。再次强调这一点:如果在不重启服务器的情况下就地修改文件,您最终可能会提供完全错误的请求。您应该通过取消链接旧副本并将新副本放在适当位置来更新文件。大多数工具(如 rdist
和 mv
)都会这样做。此模块不处理文件更改的原因是,此检查需要在每次请求时额外执行一次 stat()
操作,这是一种浪费,而且与减少 I/O 的意图相悖。
CacheFile
指令打开 mod_file_cache
的配置指令中列出的文件(或文件)的活动句柄或文件描述符,并将这些打开的文件句柄放入缓存中。当请求文件时,服务器从缓存中检索句柄并将其传递给 sendfile()
(或 Windows 上的 TransmitFile()
)套接字 API。
此文件句柄缓存仅在服务器启动或重启时执行一次。因此,每当缓存文件之一在文件系统上发生更改时,您必须重启服务器(请参阅 停止和重启 文档)。再次强调这一点:如果在不重启服务器的情况下就地修改文件,您最终可能会提供完全错误的请求。您应该通过取消链接旧副本并将新副本放在适当位置来更新文件。大多数工具(如 rdist
和 mv
)都会这样做。
不要费心询问递归缓存目录中所有文件的指令。尝试以下方法... 请参阅 Include
指令,并考虑以下命令
find /www/htdocs -type f -print \
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
描述 | 在启动时缓存文件句柄列表 |
---|---|
语法 | CacheFile 文件路径 [文件路径] ... |
上下文 | 服务器配置 |
状态 | 实验性 |
模块 | mod_file_cache |
CacheFile
指令打开一个或多个文件(作为空格分隔的参数给出)的句柄,并在服务器启动时将这些句柄放入缓存中。缓存文件的句柄在服务器关闭时会自动关闭。当文件在文件系统上发生更改时,应重启服务器以重新缓存它们。
请注意 文件路径 参数:它们必须与 Apache 的 URL 到文件名转换处理程序创建的文件系统路径完全匹配。我们不能比较 inode 或其他内容来匹配通过符号链接等的路径,因为这又会花费额外的 stat()
系统调用,这是不可接受的。此模块可能支持也可能不支持由 mod_alias
或 mod_rewrite
重写的文件名。
CacheFile /usr/local/apache/htdocs/index.html
描述 | 在启动时将文件列表映射到内存中 |
---|---|
语法 | MMapFile 文件路径 [文件路径] ... |
上下文 | 服务器配置 |
状态 | 实验性 |
模块 | mod_file_cache |
MMapFile
指令在服务器启动时将一个或多个文件(作为空格分隔的参数给出)映射到内存中。它们在服务器关闭时会自动取消映射。当文件在文件系统上发生更改时,至少应向服务器发送 HUP
或 USR1
信号以重新 mmap()
它们。
请注意 文件路径 参数:它们必须与 Apache 的 URL 到文件名转换处理程序创建的文件系统路径完全匹配。我们不能比较 inode 或其他内容来匹配通过符号链接等的路径,因为这又会花费额外的 stat()
系统调用,这是不可接受的。此模块可能支持也可能不支持由 mod_alias
或 mod_rewrite
重写的文件名。
MMapFile /usr/local/apache/htdocs/index.html