mirror of
				https://github.com/apache/httpd.git
				synced 2025-10-31 19:10:37 +03:00 
			
		
		
		
	git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87273 13f79535-47bb-0310-9956-ffa450edef68
		
			
				
	
	
		
			269 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 | |
| <HTML>
 | |
|  <HEAD>
 | |
|   <TITLE>Apache module mod_file_cache</TITLE>
 | |
|  </HEAD>
 | |
| <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
 | |
|  <BODY
 | |
|   BGCOLOR="#FFFFFF"
 | |
|   TEXT="#000000"
 | |
|   LINK="#0000FF"
 | |
|   VLINK="#000080"
 | |
|   ALINK="#FF0000"
 | |
|  >
 | |
| <!--#include virtual="header.html" -->
 | |
|   <H1 ALIGN="CENTER">Module mod_file_cache</H1>
 | |
|   <P>
 | |
|   <STRONG>This module should be used with care.  You can easily create a
 | |
|   broken site using mod_file_cache, so read this document
 | |
|   carefully.</STRONG>
 | |
|   </P>
 | |
| 
 | |
|   <P>
 | |
|   <EM>Caching</EM> frequently requested files that change very
 | |
|   infrequently is a technique for reducing server load. mod_file_cache
 | |
|   provides two techniques for caching frequently requested
 | |
|   <EM>static</EM> files.
 | |
|   Through configuration directives, you can direct mod_file_cache
 | |
|   to either open then mmap()a file, or to pre-open a file and save
 | |
|   the file's open <EM>file handle</EM>. Both techniques reduce server
 | |
|   load when processing requests for these files by doing part of the
 | |
|   work (specifically, the file I/O) for serving the file when the server
 | |
|   is started rather than during each request. 
 | |
|   </P>
 | |
| 
 | |
|   <P>
 | |
|   <CODE>mod_file_cache</CODE> is not compiled into the server by
 | |
|   default. To use <CODE>mod_file_cache</CODE> you have to enable the
 | |
|   following line in the server build <CODE>Configuration</CODE> file:
 | |
|   <PRE>
 | |
|     AddModule  modules/experimental/mod_file_cache.o
 | |
|   </PRE>
 | |
|   </P>
 | |
| 
 | |
|   <P>
 | |
|   Notice: You cannot use this for speeding up CGI programs or other files
 | |
|   which are served by special content handlers. It can only be used for
 | |
|   regular files which are usually served by the Apache core content handler.
 | |
|   </P>
 | |
| 
 | |
|   <P>
 | |
|   This module is an extension of and borrows heavily from the
 | |
|   mod_mmap_static module in Apache 1.3.
 | |
|   </P>
 | |
|   <H2>Summary</H2>
 | |
|   <P>
 | |
|   <CODE>mod_file_cache</CODE> caches a list of statically configured
 | |
|   files via <CODE>MMapFile</CODE> or <CODE>CacheFile</CODE> directives
 | |
|   in the main server configuration.
 | |
|   </P>
 | |
| 
 | |
|   <P>
 | |
|   Not all platforms support both directives. For
 | |
|   example, Apache on Windows does not currently support the MMapStatic
 | |
|   directive, while other platforms, like AIX, support both. You will
 | |
|   receive an error message in the server error log if you attempt to
 | |
|   use an unsupported directive. If given an unsupported directive, the
 | |
|   server will start but the file will not be cached. On platforms that
 | |
|   support both directives, you should experiment with both to see
 | |
|   which works best for you.
 | |
|   </P>
 | |
| 
 | |
|   <H3><CODE>MmapFile</CODE> Directive </H3>
 | |
|   <P>
 | |
|   The <CODE>MmapFile</CODE> directive of <CODE>mod_file_cache</CODE>
 | |
|   maps a list of statically configured files into memory through the
 | |
|   system call <CODE>mmap()</CODE>.  This system call is available on
 | |
|   most modern Unix derivates, but not on all.  There are sometimes
 | |
|   system-specific limits on the size and number of files that can be
 | |
|   mmap()d, experimentation is probably the easiest way to find out.
 | |
|   </P>
 | |
|   <P>
 | |
|   This mmap()ing is done once at server start or restart, only. So whenever
 | |
|   one of the mapped files changes on the filesystem you <EM>have</EM> to
 | |
|   restart the server (see the <A HREF="../stopping.html">Stopping and
 | |
|   Restarting</A> documentation).  To reiterate that point:  if the
 | |
|   files are modified <EM>in place</EM> without restarting the server
 | |
|   you may end up serving requests that are completely bogus.  You
 | |
|   should update files by unlinking the old copy and putting a new
 | |
|   copy in place. Most tools such as <CODE>rdist</CODE> and
 | |
|   <CODE>mv</CODE> do this. The reason why this modules doesn't take
 | |
|   care of changes to the files is that this check would need an extra
 | |
|   <CODE>stat()</CODE> every time which is a waste and against the
 | |
|   intent of I/O reduction.
 | |
|   </P>
 | |
| 
 | |
|   <H3><CODE>CacheFile</CODE> Directive </H3>
 | |
|   <P>
 | |
|   The <CODE>CacheFile</CODE> directive of <CODE>mod_file_cache</CODE>
 | |
|   opens an active <EM>handle</EM> or <EM>file descriptor</EM> to the
 | |
|   file (or files) listed in the configuration directive and places
 | |
|   these open file handles in the cache.  When the file is requested,
 | |
|   the server retrieves the handle from the cache and passes it to the
 | |
|   sendfile() (or TransmitFile() on Windows), socket API. 
 | |
|   </P>
 | |
|   <P>
 | |
|   Insert more details about sendfile API...
 | |
|   </P>
 | |
|   <P>
 | |
|   This file handle caching is done once at server start or restart,
 | |
|   only. So whenever one of the cached files changes on the filesystem
 | |
|   you <EM>have</EM> to restart the server (see the <A
 | |
|   HREF="../stopping.html">Stopping and Restarting</A> documentation).
 | |
|   To reiterate that point:  if the files are modified <EM>in
 | |
|   place</EM> without restarting the server you may end up serving
 | |
|   requests that are completely bogus.  You should update files by
 | |
|   unlinking the old copy and putting a new copy in place. Most tools
 | |
|   such as <CODE>rdist</CODE> and <CODE>mv</CODE> do this.
 | |
|   </P>
 | |
| 
 | |
|   <H2>Directives</H2>
 | |
|   <UL>
 | |
|    <LI><A HREF="#mmapfile">MMapFile</A>
 | |
|    </LI>
 | |
|    <LI><A HREF="#cachefile">CacheFile</A>
 | |
|    </LI>
 | |
|   </UL>
 | |
| 
 | |
|   <HR>
 | |
| 
 | |
|   <H2><A NAME="mmapfile">MMapFile</A></H2>
 | |
|   <P>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Syntax"
 | |
|    REL="Help"
 | |
|   ><STRONG>Syntax:</STRONG></A> MMapFile <EM>filename</EM> [<em>filename</em>] ...
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Default"
 | |
|    REL="Help"
 | |
|   ><STRONG>Default:</STRONG></A> <EM>None</EM>
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Context"
 | |
|    REL="Help"
 | |
|   ><STRONG>Context:</STRONG></A> server-config
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Override"
 | |
|    REL="Help"
 | |
|   ><STRONG>Override:</STRONG></A> <EM>Not applicable</EM>
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Status"
 | |
|    REL="Help"
 | |
|   ><STRONG>Status:</STRONG></A> Experimental
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Module"
 | |
|    REL="Help"
 | |
|   ><STRONG>Module:</STRONG></A> mod_file_cache
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Compatibility"
 | |
|    REL="Help"
 | |
|   ><STRONG>Compatibility:</STRONG></A> Only in Apache 1.3 (via
 | |
|   mod_mmap_statis) or later.
 | |
| 
 | |
|   <P>
 | |
|   The <CODE>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>filename</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>mod_alias</CODE> or
 | |
|   <CODE>mod_rewrite</CODE>.
 | |
|   </P>
 | |
| 
 | |
|   Example:
 | |
| 
 | |
|   <PRE>
 | |
|   MMapFile /usr/local/apache/htdocs/index.html
 | |
|   </PRE>
 | |
| 
 | |
| <hr>
 | |
| 
 | |
|   <H2><A NAME="cachefile">CacheFile</A></H2>
 | |
|   <P>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Syntax"
 | |
|    REL="Help"
 | |
|   ><STRONG>Syntax:</STRONG></A> CacheFile <EM>filename</EM> [<em>filename</em>] ...
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Default"
 | |
|    REL="Help"
 | |
|   ><STRONG>Default:</STRONG></A> <EM>None</EM>
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Context"
 | |
|    REL="Help"
 | |
|   ><STRONG>Context:</STRONG></A> server-config
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Override"
 | |
|    REL="Help"
 | |
|   ><STRONG>Override:</STRONG></A> <EM>Not applicable</EM>
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Status"
 | |
|    REL="Help"
 | |
|   ><STRONG>Status:</STRONG></A> Experimental
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Module"
 | |
|    REL="Help"
 | |
|   ><STRONG>Module:</STRONG></A> mod_file_cache
 | |
|   <BR>
 | |
|   <A
 | |
|    HREF="directive-dict.html#Compatibility"
 | |
|    REL="Help"
 | |
|   ><STRONG>Compatibility:</STRONG></A> Only available in Apache 2.0 or later.
 | |
| 
 | |
|   <P>
 | |
|   The <CODE>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>filename</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>mod_alias</CODE> or
 | |
|   <CODE>mod_rewrite</CODE>.
 | |
|   </P>
 | |
| 
 | |
|   Example:
 | |
| 
 | |
|   <PRE>
 | |
|   CacheFile /usr/local/apache/htdocs/index.html
 | |
|   </PRE>
 | |
| 
 | |
|   <P>
 | |
|   <STRONG>Note</STRONG>: 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">Include</A> directive, and consider this command:
 | |
|   <PRE>
 | |
|   find /www/htdocs -type f -print \
 | |
|   | sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
 | |
|   </PRE>
 | |
| 
 | |
| <!--#include virtual="footer.html" -->
 | |
|  </BODY>
 | |
| </HTML>
 |