mod_cgi.html revision c9ba2370d003b2c4d07e295d30b313566386a194
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
c3d42e13d2a7c3749229498658aec34e7e4fd0a0Christian MaederXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
c3d42e13d2a7c3749229498658aec34e7e4fd0a0Christian Maeder This file is generated from xml source: DO NOT EDIT
2d453384452f29ab46f29c0163a830492f936512Till MossakowskiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
6034a40f7444be44812edc9819de3b184220e4cbChristian Maeder--><title>mod_cgi - Apache HTTP Server</title><link rel="stylesheet" type="text/css" href="/style/manual.css"/></head><body><blockquote><div align="center"><img src="/images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cgi</h1><table bgcolor="#cccccc" cellpadding="0" cellspacing="1"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Execution of CGI scripts</td></tr><tr><td><a class="help" href="module-dict.html#Status">Status:</a></td><td>Base</td></tr><tr><td><a class="help" href="module-dict.html#ModuleIdentifier">Module&nbsp;Identifier:</a></td><td>cgi_module</td></tr></table></td></tr></table><h2>Summary</h2>
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski
c3d42e13d2a7c3749229498658aec34e7e4fd0a0Christian Maeder
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski
c673000621dd506e5fc7babf8ca6303b7fcefc14Christian Maeder <p>Any file that has the mime type
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski <code>application/x-httpd-cgi</code> or handler
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder <code>cgi-script</code> (Apache 1.1 or later) will be treated
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski as a CGI script, and run by the server, with its output being
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski returned to the client. Files acquire this type either by
2f65d931e866162d39d09c43021a55314040b377Christian Maeder having a name containing an extension defined by the
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder <a class="directive" href="mod_mime.html#addtype"><code class="directive">AddType</code></a> directive, or by being
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder in a <a class="directive" href="mod_alias.html#scriptalias"><code class="directive">ScriptAlias</code></a>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder directory.</p>
036037a4510ea63a81a4829ad0c11ef39b2391b0Christian Maeder
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder <p>When the server invokes a CGI script, it will add a variable
2d453384452f29ab46f29c0163a830492f936512Till Mossakowski called <code>DOCUMENT_ROOT</code> to the environment. This
2f65d931e866162d39d09c43021a55314040b377Christian Maeder variable will contain the value of the
d5ef5a29a89fa5548f81fcd49fcf0ffda69d45b0Christian Maeder <a class="directive" href="core.html#documentroot"><code class="directive">DocumentRoot</code></a> configuration
e562f4e0579bf7dd11f2b77f24ef94cd0dd78319Christian Maeder variable.</p>
e42eddbc69dd31f7cd696e38f82acad678831cb7Jian Chun Wang
036037a4510ea63a81a4829ad0c11ef39b2391b0Christian Maeder <p>For an introduction to using CGI scripts with Apache, see
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder our tutorial on <a href="/howto/cgi.html">Dynamic Content
39982c927a6052fe2ebd13d4c03b2fcbae0d2f0cJian Chun Wang With CGI</a>.</p>
47d6bc7bc9a708427f96be8d805f712697ad3d9eChristian Maeder
a3acfb955e4427cde9094615b8a62623a441f8c7Christian Maeder <p>When using a multi-threaded MPM under unix, the module
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder <code><a href="mod_cgid.html">mod_cgid</a></code> should be used in place of
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder this module. At the user level, the two modules are essentially
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder identical.</p>
807d5fddaa5dd8924321c73400fcf875a9ed9a9cChristian Maeder<h2>Directives</h2><ul><li><a href="#scriptlog">ScriptLog</a></li><li><a href="#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="#scriptloglength">ScriptLogLength</a></li></ul><p><strong>See also </strong></p><ul><li><a class="directive" href="core.html#options"><code class="directive">Options</code></a></li><li><a class="directive" href="mod_alias.html#scriptalias"><code class="directive">ScriptAlias</code></a></li><li><a class="directive" href="mod_mime.html#addhandler"><code class="directive">AddHandler</code></a></li></ul><h2>CGI Environment variables</h2>
c4ba3e20a432419afff01558e425e00be42871d8Christian Maeder <p>The server will set the CGI environment variables as described
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder specification</a>, with the following provisions:</p>
62b04256f84128edd94c0575757332f84450bd69Christian Maeder
62b04256f84128edd94c0575757332f84450bd69Christian Maeder <dl>
99c923311eab71a85f1dcc4785d349609c828da4Christian Maeder <dt>PATH_INFO</dt>
e42eddbc69dd31f7cd696e38f82acad678831cb7Jian Chun Wang
807d5fddaa5dd8924321c73400fcf875a9ed9a9cChristian Maeder <dd>This will not be available if the <a class="directive" href="core.html#acceptpathinfo"><code class="directive">AcceptPathInfo</code></a> directive is explicitly set to
807d5fddaa5dd8924321c73400fcf875a9ed9a9cChristian Maeder <code>off</code>. The default behavior, if AcceptPathInfo is
807d5fddaa5dd8924321c73400fcf875a9ed9a9cChristian Maeder not given, is that mod_cgi will accept path info (trailing
e42eddbc69dd31f7cd696e38f82acad678831cb7Jian Chun Wang /more/path/info following the script filename in the URI), while
e42eddbc69dd31f7cd696e38f82acad678831cb7Jian Chun Wang the core server will return a 404 NOT FOUND error for requests
c4ba3e20a432419afff01558e425e00be42871d8Christian Maeder with additional path info. Omitting the AcceptPathInfo
99c923311eab71a85f1dcc4785d349609c828da4Christian Maeder directive has the same effect as setting it <code>on</code> for
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder mod_cgi requests.</dd>
c4ba3e20a432419afff01558e425e00be42871d8Christian Maeder
c4ba3e20a432419afff01558e425e00be42871d8Christian Maeder <dt>REMOTE_HOST</dt>
ca3a4317b88adee116c04c6b08458b5690d83209Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <dd>This will only be set if <a class="directive" href="core.html#hostnamelookups"><code class="directive">HostnameLookups</code></a> is set to <code>on</code> (it
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder is off by default), and if a reverse DNS lookup of the accessing
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder host's address indeed finds a host name.</dd>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <dt>REMOTE_IDENT</dt>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <dd>This will only be set if <a class="directive" href="core.html#identitycheck"><code class="directive">IdentityCheck</code></a> is set to
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <code>on</code> and the accessing host supports the ident
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder protocol. Note that the contents of this variable cannot be
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder relied upon because it can easily be faked, and if there is a
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder proxy between the client and the server, it is usually
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder totally useless.</dd>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <dt>REMOTE_USER</dt>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c3d42e13d2a7c3749229498658aec34e7e4fd0a0Christian Maeder <dd>This will only be set if the CGI script is subject to
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder authentication.</dd>
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder </dl>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder<h2><a name="cgi_debug">CGI Debugging</a></h2>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <p>Debugging CGI scripts has traditionally been difficult, mainly
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder because it has not been possible to study the output (standard
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder output and error) for scripts which are failing to run
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder properly. These directives, included in Apache 1.2 and later,
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder provide more detailed logging of errors when they occur. </p>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder<h3>CGI Logfile Format</h3>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <p>When configured, the CGI error log logs any CGI which does not
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder execute properly. Each CGI script which fails to operate causes
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder several lines of information to be logged. The first two lines
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder are always of the format:</p>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder %% [<em>time</em>] <em>request-line</em><br/>
d12de70436e416b477af9ae1bf6989f57488bf92Christian Maeder %% <em>HTTP-status</em> <em>CGI-script-filename</em>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder</code></td></tr></table></blockquote>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder <p>If the error is that CGI script cannot be run, the log file
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder will contain an extra two lines:</p>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder %%error<br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <em>error-message</em>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder</code></td></tr></table></blockquote>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder <p>Alternatively, if the error is the result of the script
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder returning incorrect header information (often due to a bug in
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder the script), the following information is logged: </p>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder %request<br/>
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder <em>All HTTP request headers received</em><br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <em>POST or PUT entity (if any)</em><br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder %response<br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <em>All headers output by the CGI script</em><br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder %stdout<br/>
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder <em>CGI standard output</em><br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder %stderr<br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <em>CGI standard error</em><br/>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder</code></td></tr></table></blockquote>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <p>(The %stdout and %stderr parts may be missing if the script did
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder not output anything on standard output or standard error). </p>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder<hr/><h2><a name="ScriptLog">ScriptLog</a> <a name="scriptlog">Directive</a></h2><table bgcolor="#cccccc" border="0" cellspacing="0" cellpadding="1"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the CGI script error logfile</td></tr><tr><td><a class="help" href="directive-dict.html#Syntax">Syntax:</a></td><td>ScriptLog <em>file-path</em></td></tr><tr><td><a class="help" href="directive-dict.html#Context">Context:</a></td><td>server config</td></tr><tr><td><a class="help" href="directive-dict.html#Status">Status:</a></td><td>Base</td></tr><tr><td><a class="help" href="directive-dict.html#Module">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder <p>The <code class="directive">ScriptLog</code> directive sets the CGI
c962b775a1084a2013cdf23fd1e4a91a7994daa2Christian Maeder script error logfile. If no ScriptLog is given, no error log is
b6a54d7292d7a3713000847334de4316d105f40fChristian Maeder created. If given, any CGI errors are logged into the filename
3b8ed4c60cde6b3fc00836e7814262c4377e8648Paolo Torrini given as argument. If this is a relative file or path it is taken
1c8c2ec97ff7dee8381aca53f0fca99c01f7b32fSonja Gröning relative to the server root.</p>
7f6b97541fdee30d62a0a3cfa58173212a6cd002Christian Maeder
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder <p>This log will be opened as the user the child processes run
7f6b97541fdee30d62a0a3cfa58173212a6cd002Christian Maeder as, ie. the user specified in the main <a class="directive" href="mpm_common.html#user"><code class="directive">User</code></a> directive. This means that
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder either the directory the script log is in needs to be writable
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder by that user or the file needs to be manually created and set
4eed11f3c47a94e8908e15a0af70370ad35b3586Paolo Torrini to be writable by that user. If you place the script log in
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder your main logs directory, do <strong>NOT</strong> change the
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder directory permissions to make it writable by the user the child
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder processes run as.</p>
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder <p>Note that script logging is meant to be a debugging feature
2f65d931e866162d39d09c43021a55314040b377Christian Maeder when writing CGI scripts, and is not meant to be activated
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder continuously on running servers. It is not optimized for speed
89873d3eb29b4ef32bfac57443cf831c8b2e0e82Christian Maeder or efficiency, and may have security problems if used in a
4eed11f3c47a94e8908e15a0af70370ad35b3586Paolo Torrini manner other than that for which it was designed.</p>
89c8609b3606fdb621eb8f987b88dc3813b5bbd5Christian Maeder<hr/><h2><a name="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer">Directive</a></h2><table bgcolor="#cccccc" border="0" cellspacing="0" cellpadding="1"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum amount of PUT or POST requests that will be recorded
4eed11f3c47a94e8908e15a0af70370ad35b3586Paolo Torriniin the scriptlog</td></tr><tr><td><a class="help" href="directive-dict.html#Syntax">Syntax:</a></td><td>ScriptLogBuffer <em>bytes</em></td></tr><tr><td><a class="help" href="directive-dict.html#Default">Default:</a></td><td><code>ScriptLogBuffer 1024</code></td></tr><tr><td><a class="help" href="directive-dict.html#Context">Context:</a></td><td>server config</td></tr><tr><td><a class="help" href="directive-dict.html#Status">Status:</a></td><td>Base</td></tr><tr><td><a class="help" href="directive-dict.html#Module">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
bb027d3cacbd83dfec98beb38001f105e4918557Christian Maeder <p>The size of any PUT or POST entity body that is logged to
bb027d3cacbd83dfec98beb38001f105e4918557Christian Maeder the file is limited, to prevent the log file growing too big
bb027d3cacbd83dfec98beb38001f105e4918557Christian Maeder too quickly if large bodies are being received. By default, up
055577747e0026ff8168808a7f228bb3f433b5bbChristian Maeder to 1024 bytes are logged, but this can be changed with this
055577747e0026ff8168808a7f228bb3f433b5bbChristian Maeder directive.</p>
055577747e0026ff8168808a7f228bb3f433b5bbChristian Maeder<hr/><h2><a name="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength">Directive</a></h2><table bgcolor="#cccccc" border="0" cellspacing="0" cellpadding="1"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Size limit of the CGI script logfile</td></tr><tr><td><a class="help" href="directive-dict.html#Syntax">Syntax:</a></td><td>ScriptLogLength <em>bytes</em></td></tr><tr><td><a class="help" href="directive-dict.html#Default">Default:</a></td><td><code>ScriptLogLength 10385760</code></td></tr><tr><td><a class="help" href="directive-dict.html#Context">Context:</a></td><td>server config</td></tr><tr><td><a class="help" href="directive-dict.html#Status">Status:</a></td><td>Base</td></tr><tr><td><a class="help" href="directive-dict.html#Module">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
99c923311eab71a85f1dcc4785d349609c828da4Christian Maeder <p><code class="directive">ScriptLogLength</code> can be used to limit the
99c923311eab71a85f1dcc4785d349609c828da4Christian Maeder size of the CGI script logfile. Since the logfile logs a lot of
99c923311eab71a85f1dcc4785d349609c828da4Christian Maeder information per CGI error (all request headers, all script output)
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder it can grow to be a big file. To prevent problems due to unbounded
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder growth, this directive can be used to set an maximum file-size for
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder the CGI logfile. If the file exceeds this size, no more
62dd3cd58cda003c32ac69ff12dc82b0a6f5d9d3Christian Maeder information will be written to it.</p>
613bf0ed7d98a961755408ead328687ec17f74fdChristian Maeder<hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="/images/index.gif" alt="Index"/></a><a href="../"><img src="/images/home.gif" alt="Home"/></a></blockquote></body></html>