<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>httpd - Apache Hypertext Transfer Protocol Server - Apache HTTP Server Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.4</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>httpd - Apache Hypertext Transfer Protocol Server</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/programs/httpd.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/programs/httpd.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/programs/httpd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/programs/httpd.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>

     <p><code>httpd</code> is the Apache HyperText Transfer Protocol
     (HTTP) server program.  It is designed to be run as a standalone
     daemon process. When used like this it will create a pool of
     child processes or threads to handle requests.</p>

     <p>In general, <code>httpd</code> should not be invoked directly,
     but rather should be invoked via <code class="program"><a href="../programs/apachectl.html">apachectl</a></code> on Unix-based systems or <a href="../platform/windows.html#winsvc">as a service on Windows NT,
     2000 and XP</a> and <a href="../platform/windows.html#wincons">as
     a console application on Windows 9x and ME</a>.</p>
</div>
<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="../invoking.html">Starting Apache httpd</a></li><li><a href="../stopping.html">Stopping Apache httpd</a></li><li><a href="../configuring.html">Configuration Files</a></li><li><a href="../platform/">Platform-specific Documentation</a></li><li><code class="program"><a href="../programs/apachectl.html">apachectl</a></code></li><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
     <p><code><strong>httpd</strong> [ -<strong>d</strong>
     <var>serverroot</var> ] [ -<strong>f</strong> <var>config</var> ]
     [ -<strong>C</strong> <var>directive</var> ] [ -<strong>c</strong>
     <var>directive</var> ] [ -<strong>D</strong> <var>parameter</var> ]
     [ -<strong>e</strong> <var>level</var> ] [ -<strong>E</strong>
     <var>file</var> ]
     [ <strong>-k</strong> start|restart|graceful|stop|graceful-stop ]
     [ -<strong>h</strong> ]
     [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
     [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
     [ -<strong>X</strong> ] [ -<strong>M</strong> ] [ -<strong>T</strong> ]
     </code></p>

     <p>On <a href="../platform/windows.html">Windows systems</a>, the
     following additional arguments are available:</p>

     <p><code><strong>httpd</strong> [ -<strong>k</strong>
     install|config|uninstall ] [ -<strong>n</strong> <var>name</var> ]
     [ -<strong>w</strong> ]</code></p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="options" id="options">Options</a></h2>

<dl>
<dt><code>-d <var>serverroot</var></code></dt>

<dd>Set the initial value for the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive to
<var>serverroot</var>.  This can be overridden by the ServerRoot
directive in the configuration file. The default is
<code>/usr/local/apache2</code>.</dd>

<dt><code>-f <var>config</var></code></dt>

<dd>Uses the directives in the file <var>config</var> on startup. If
<var>config</var> does not begin with a /, then it is taken to be a
path relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. The default is
<code>conf/httpd.conf</code>.</dd>

<dt><code>-k <code>start|restart|graceful|stop|graceful-stop</code></code></dt>

<dd>Signals <code>httpd</code> to start, restart, or stop.  See <a href="../stopping.html">Stopping Apache httpd</a> for more information.</dd>

<dt><code>-C <var>directive</var></code></dt>

<dd>Process the configuration <var>directive</var> before reading
config files.</dd>

<dt><code>-c <var>directive</var></code></dt>

<dd>Process the configuration <var>directive</var> after reading config
files.</dd>


<dt><code>-D <var>parameter</var></code></dt>

<dd>Sets a configuration <var>parameter </var>which can be used with
<code class="directive"><a href="../mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> sections
in the configuration files to conditionally skip or process commands
at server startup and restart. Also can be used to set certain
less-common startup parameters including <code>-DNO_DETACH</code>
(prevent the parent from forking) and <code>-DFOREGROUND</code>
(prevent the parent from calling <code>setsid()</code> et al).</dd>

<dt><code>-e <var>level</var></code></dt>

<dd>Sets the <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> to
<var>level</var> during server startup.  This is useful for
temporarily increasing the verbosity of the error messages to find
problems during startup.</dd>

<dt><code>-E <var>file</var></code></dt>

<dd>Send error messages during server startup to <var>file</var>.</dd>

<dt><code>-h</code></dt>

<dd>Output a short summary of available command line options.</dd>

<dt><code>-l</code></dt>

<dd>Output a list of modules compiled into the server.  This will
<strong>not</strong> list dynamically loaded modules included using
the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive.</dd>

<dt><code>-L</code></dt>

<dd>Output a list of directives provided by static modules, together with expected arguments and
places where the directive is valid. Directives provided by shared modules are not listed.</dd>

<dt><code>-M</code></dt>

<dd>Dump a list of loaded Static and Shared Modules.</dd>

<dt><code>-S</code></dt>

<dd>Show the settings as parsed from the config file (currently only
shows the virtualhost settings).</dd>

<dt><code>-T</code> (Available in 2.3.8 and later)</dt>

<dd>Skip document root check at startup/restart.</dd>

<dt><code>-t</code></dt>

<dd>Run syntax tests for configuration files only.  The program
immediately exits after these syntax parsing tests with either a return code
of 0 (Syntax OK) or return code not equal to 0 (Syntax Error).  If -D
<var>DUMP</var>_<var>VHOSTS </var>is also set, details of the virtual host
configuration will be printed. If -D <var>DUMP</var>_<var>MODULES </var> is
set, all loaded modules will be printed.</dd>

<dt><code>-v</code></dt>

<dd>Print the version of <code>httpd</code>, and then exit.</dd>

<dt><code>-V</code></dt>

<dd>Print the version and build parameters of <code>httpd</code>, and
then exit.</dd>

<dt><code>-X</code></dt>

<dd>Run httpd in debug mode.  Only one worker will be started and the
server will not detach from the console.</dd>

</dl>

<p>The following arguments are available only on the <a href="../platform/windows.html">Windows platform</a>:</p>

<dl>

<dt><code>-k install|config|uninstall</code></dt>

<dd>Install Apache httpd as a Windows NT service; change startup options for
the Apache httpd service; and uninstall the Apache httpd service.</dd>

<dt><code>-n <var>name</var></code></dt>

<dd>The <var>name</var> of the Apache httpd service to signal.</dd>

<dt><code>-w</code></dt>

<dd>Keep the console window open on error so that the error message can
be read.</dd>

</dl>

</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/programs/httpd.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/programs/httpd.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/programs/httpd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/programs/httpd.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/programs/httpd.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2025 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>