mod_file_cache.html revision ac6d1ce7ccb1950bb2145a5c2c3498235353bcb0
3293N/A<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
3293N/AXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3293N/A This file is generated from xml source: DO NOT EDIT
3293N/AXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3293N/A--><title>mod_file_cache - Apache HTTP Server</title><link href="/style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="/images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_file_cache</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Caches a static list of files in memory</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>file_cache_module</td></tr></table></td></tr></table><h2>Summary</h2>
3293N/A
3293N/A<blockquote><table><tr><td bgcolor="#ffe5f5">
3293N/AThis module should be used with care. You can easily
3293N/A create a broken site using mod_file_cache, so read this
3293N/A document carefully.
3293N/A</td></tr></table></blockquote>
3293N/A
3293N/A <p><em>Caching</em> frequently requested files that change very
3293N/A infrequently is a technique for reducing server load.
3293N/A mod_file_cache provides two techniques for caching frequently
3293N/A requested <em>static</em> files. Through configuration
3293N/A directives, you can direct mod_file_cache to either open then
3293N/A mmap()a file, or to pre-open a file and save the file's open
3293N/A <em>file handle</em>. Both techniques reduce server load when
3293N/A processing requests for these files by doing part of the work
3293N/A (specifically, the file I/O) for serving the file when the
3293N/A server is started rather than during each request.</p>
3293N/A
3293N/A <p>Notice: You cannot use this for speeding up CGI programs or
3293N/A other files which are served by special content handlers. It
3293N/A can only be used for regular files which are usually served by
3293N/A the Apache core content handler.</p>
3293N/A
3293N/A <p>This module is an extension of and borrows heavily from the
3293N/A mod_mmap_static module in Apache 1.3.</p>
3293N/A<h2>Directives</h2><ul><li><a href="#cachefile">CacheFile</a></li><li><a href="#mmapfile">MMapFile</a></li></ul><h2>Using mod_file_cache</h2>
3293N/A
3293N/A <p><code><a href="mod_file_cache.html">mod_file_cache</a></code> caches a list of statically
3293N/A configured files via <a href="#mmapfile" class="directive"><code class="directive">MMapFile</code></a> or <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a> directives in the
3293N/A main server configuration.</p>
3293N/A
3293N/A <p>Not all platforms support both directives. For example, Apache
3293N/A on Windows does not currently support the <a href="#mmapstatic" class="directive"><code class="directive">MMapStatic</code></a> directive, while
3293N/A other platforms, like AIX, support both. You will receive an error
3293N/A message in the server error log if you attempt to use an
3293N/A unsupported directive. If given an unsupported directive, the
3293N/A server will start but the file will not be cached. On platforms
3293N/A that support both directives, you should experiment with both to
3293N/A see which works best for you.</p>
3293N/A
3293N/A<h3>MmapFile Directive</h3>
3293N/A
3293N/A <p>The <a href="#mmapfile" class="directive"><code class="directive">MmapFile</code></a>
3293N/A directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> maps a list of
3293N/A statically configured files into memory through the system call
3293N/A <code>mmap()</code>. This system call is available on most modern
3293N/A Unix derivates, but not on all. There are sometimes
3293N/A system-specific limits on the size and number of files that can be
3293N/A mmap()d, experimentation is probably the easiest way to find
3293N/A out.</p>
3293N/A
3293N/A <p>This mmap()ing is done once at server start or restart,
3293N/A only. So whenever one of the mapped files changes on the
3293N/A filesystem you <em>have</em> to restart the server (see the <a href="/stopping.html">Stopping and Restarting</a>
3293N/A documentation). To reiterate that point: if the files are
3293N/A modified <em>in place</em> without restarting the server you
3293N/A may end up serving requests that are completely bogus. You
3293N/A should update files by unlinking the old copy and putting a new
3293N/A copy in place. Most tools such as <code>rdist</code> and
3293N/A <code>mv</code> do this. The reason why this modules doesn't
3293N/A take care of changes to the files is that this check would need
3293N/A an extra <code>stat()</code> every time which is a waste and
3293N/A against the intent of I/O reduction.</p>
3293N/A
3293N/A
3293N/A<h3>CacheFile Directive</h3>
3293N/A
3293N/A <p>The <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a>
3293N/A directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> opens an active
3293N/A <em>handle</em> or <em>file descriptor</em> to the file (or files)
3293N/A listed in the configuration directive and places these open file
3293N/A handles in the cache. When the file is requested, the server
3293N/A retrieves the handle from the cache and passes it to the
3293N/A sendfile() (or TransmitFile() on Windows), socket API.</p>
3293N/A
3293N/A <p>Insert more details about sendfile API...</p>
3293N/A
3293N/A <p>This file handle caching is done once at server start or
3293N/A restart, only. So whenever one of the cached files changes on
3293N/A the filesystem you <em>have</em> to restart the server (see the
3293N/A <a href="/stopping.html">Stopping and Restarting</a>
3293N/A documentation). To reiterate that point: if the files are
3293N/A modified <em>in place</em> without restarting the server you
3293N/A may end up serving requests that are completely bogus. You
3293N/A should update files by unlinking the old copy and putting a new
3293N/A copy in place. Most tools such as <code>rdist</code> and
3293N/A <code>mv</code> do this.</p>
3293N/A
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> Don't bother asking for a for a
directive which recursively caches all the files in a
directory. Try this instead... See the
<a href="core.html#include" class="directive"><code class="directive">Include</code></a> directive, and consider
this command:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
find /www/htdocs -type f -print \ <br>
| sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
</code></td></tr></table></blockquote>
</td></tr></table></blockquote>
<hr/><h2><a name="CacheFile">CacheFile</a> <a name="cachefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheFile
<em>file-path</em> [<em>file-path</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">CacheFile</code> directive opens handles to
one or more files (given as whitespace separated arguments) and
places these handles into the cache at server startup
time. Handles to cached files are automatically closed on a server
shutdown. When the files have changed on the filesystem, the
server should be restarted to to re-cache them.</p>
<p>Be careful with the <em>file-path</em> arguments: They have
to literally match the filesystem path Apache's URL-to-filename
translation handlers create. We cannot compare inodes or other
stuff to match paths through symbolic links <em>etc.</em>
because that again would cost extra <code>stat()</code> system
calls which is not acceptable. This module may or may not work
with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
<code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
CacheFile /usr/local/apache/htdocs/index.html
</code></td></tr></table></blockquote>
<hr/><h2><a name="MMapFile">MMapFile</a> <a name="mmapfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MMapFile <em>file-path</em> [<em>file-path</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">MMapFile</code> directive maps one or more files
(given as whitespace separated arguments) into memory at server
startup time. They are automatically unmapped on a server
shutdown. When the files have changed on the filesystem at
least a HUP or USR1 signal should be send to the server to
re-mmap them.</p>
<p>Be careful with the <em>file-path</em> arguments: They have
to literally match the filesystem path Apache's URL-to-filename
translation handlers create. We cannot compare inodes or other
stuff to match paths through symbolic links <em>etc.</em>
because that again would cost extra <code>stat()</code> system
calls which is not acceptable. This module may or may not work
with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
<code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
MMapFile /usr/local/apache/htdocs/index.html
</code></td></tr></table></blockquote>
<hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="/images/index.gif"/></a><a href="../"><img alt="Home" src="/images/home.gif"/></a></blockquote></body></html>