On this page
Apache 模块 mod_file_cache
Description: | 在内存中缓存文件的静态列表 |
---|---|
Status: | Experimental |
Module Identifier: | file_cache_module |
Source File: | mod_file_cache.c |
Summary
Warning
该模块应谨慎使用。您可以使用mod_file_cache轻松创建损坏的站点,因此请仔细阅读此文档。
缓存很少更改的经常请求的文件是一种减少服务器负载的技术。 mod_file_cache提供了两种技术来缓存经常请求的* static 文件。通过配置指令,您可以指示mod_file_cache打开文件然后mmap()
打开文件,或者预打开文件并保存文件的打开 file handle *。两种技术都通过在服务器启动时而不是在每个请求期间进行服务文件的一部分工作(特别是文件 I/O)来减少处理这些文件的请求时的服务器负载。
注意:您不能使用它来加速 CGI 程序或特殊内容处理程序提供的其他文件。它只能用于通常由 Apache 核心内容处理程序提供服务的常规文件。
该模块是 Apache 1.3 中mod_mmap_static
模块的扩展,并大量借鉴了该模块。
Using mod_file_cache
mod_file_cache通过主服务器配置中的MMapFile或CacheFile指令缓存静态配置的文件列表。
并非所有平台都支持这两个指令。如果您尝试使用不受支持的指令,则会在服务器错误日志中收到一条错误消息。如果给出了不受支持的指令,则服务器将启动,但不会缓存文件。在同时支持这两个指令的平台上,您应该同时尝试这两个指令,以查看哪种最适合您。
MMapFile Directive
mod_file_cache的MMapFile伪指令通过系统调用mmap()
将一系列静态配置的文件 Map 到内存中。大多数现代的 Unix 派生版本都可以使用此系统调用,但并非全部都可用。有时,系统可能会限制文件的大小和数量,具体取决于系统,这可能是最容易发现的方法。
只能在服务器启动或重新启动时完成mmap()
ing。因此,只要 Map 文件中的一个在文件系统上更改,您就具有重新启动服务器的权限(请参阅停止并重新启动文档)。重申这一点:如果在不重启服务器的情况下对文件进行了“原地”修改,则可能会导致完全伪造的请求得到处理。您应通过取消链接旧副本并放置新副本来更新文件。诸如rdist
和mv
之类的大多数工具都可以执行此操作。该模块不处理文件更改的原因是,每次检查都需要额外的stat()
,这很浪费,并且违反了 I/O 减少的意图。
CacheFile Directive
mod_file_cache的CacheFile伪指令为配置伪指令中列出的一个(或多个)文件打开一个活动的句柄或文件 Descriptors,并将这些打开的文件句柄放置在缓存中。当请求文件时,服务器从缓存中检索该句柄,并将其传递给sendfile()
(在 Windows 上为TransmitFile()
)套接字 API。
该文件句柄缓存仅在服务器启动或重新启动时完成一次。因此,只要其中一个缓存文件在文件系统上发生更改,您就必须重新启动服务器(请参阅停止并重新启动文档)。重申这一点:如果在不重启服务器的情况下对文件进行了“原地”修改,则可能会导致完全伪造的请求得到处理。您应通过取消链接旧副本并放置新副本来更新文件。大多数工具(例如rdist
和mv
)都可以执行此操作。
Note
不要理会要求使用指令以递归方式将目录中的所有文件缓存的指令。请改用此方法...请参阅Include指令,并考虑以下命令:
find /www/htdocs -type f -print \ | sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
CacheFile Directive
Description: | 在启动时缓存文件句柄列表 |
---|---|
Syntax: | CacheFile file-path [file-path] ... |
Context: | server config |
Status: | Experimental |
Module: | mod_file_cache |
CacheFile
指令打开一个或多个文件的句柄(以空格分隔的参数给出),并在服务器启动时将这些句柄放入高速缓存中。服务器关闭时,将自动关闭对缓存文件的句柄。文件在文件系统上更改后,应重新启动服务器以重新缓存它们。
注意文件路径参数:它们必须从字面上匹配 Apache 的 URL 到文件名转换处理程序创建的文件系统路径。我们不能比较 inode 或其他东西来匹配符号链接* etc. *的路径,因为这又会花费额外的stat()
系统调用,这是不可接受的。该模块可能无法使用mod_alias或mod_rewrite重写的文件名。
Example
CacheFile /usr/local/apache/htdocs/index.html
MMapFile Directive
Description: | 在启动时将文件列表 Map 到内存中 |
---|---|
Syntax: | MMapFile file-path [file-path] ... |
Context: | server config |
Status: | Experimental |
Module: | mod_file_cache |
MMapFile
指令在服务器启动时将一个或多个文件(以空格分隔的参数提供)Map 到内存中。它们会在服务器关闭时自动取消 Map。文件在文件系统上更改后,至少应将HUP
或USR1
signal 发送到服务器以重新mmap()
。
注意文件路径参数:它们必须从字面上匹配 Apache 的 URL 到文件名转换处理程序创建的文件系统路径。我们不能比较 inode 或其他东西来匹配符号链接* etc. *的路径,因为这又会花费额外的stat()
系统调用,这是不可接受的。该模块可能无法使用mod_alias或mod_rewrite重写的文件名。
Example
MMapFile /usr/local/apache/htdocs/index.html