<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Using Apache with Microsoft Windows</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">Using Apache With Microsoft Windows</H1>

<p>This document explains how to compile, install, configure and run
   Apache 1.3a1 (or later) under Microsoft Windows. Please note that at
   this time, Windows support is entirely experimental, and is
   recommended only for experienced users. The Apache Group does not
   guarantee that this software will work as documented, or even at
   all. If you find any bugs, or wish to contribute in other ways, please
   use our <a href="http://www.apache.org/bug_report.html">bug reporting
   page.</a></p>

<hr>

<ul>
  <li><a href="#req">Requirements</a>
  <li><a href="#down">Downloading Apache for Windows</a>
  <li><a href="#comp">Compiling Apache for Windows</a>
  <li><a href="#inst">Installing Apache for Windows</a>
  <li><a href="#use">Using Apache for Windows</a>
</ul>

<hr>

<h2><a name="req">Requirements</a></h2>

<p>Apache 1.3a1 requires the following:</p>

<ul>
  <li>Microsoft Windows NT 4.0<a href="#351">*</a>, or Windows 95.
  <li>An Intel-based PC-compatible capable of running above OS (exact
      requirements unknown) with a connection to a TCP/IP network.
  <li>Microsoft Visual C++ 5.0 or later.
</ul>

<p><small><a name="351">*</a> Apache may run with Windows NT 3.5.1, but
   has not been tested.</small></p>

<p>Apache 1.3a1 is available only in source form. Future releases will
   contain prebuilt binaries for use by those without compilers (which we
   understand are the vast majority of Windows users), however the
   current release requires Microsoft Visual C++ 5.0 or later. The Apache
   Group is releasing 1.3a1 only as source to limit the alpha release to
   those who have the tools and knowledge to assist with the development
   processes.</p>

<p>This documentation assumes good working knowledge of Microsoft
   Windows, Microsoft Visual C++, and the Apache web server (for
   Unix).</p>

<H2><a name="down">Downloading Apache for Windows</a></H2>

<p>Information on the latest version of Apache can be found on the Apache
web server at <A
HREF="http://www.apache.org/">http://www.apache.org/</A>.  This will
list the current release, any more recent alpha or beta-test release,
together with details of mirror web and anonymous ftp sites.</p>

<p>You will be able to download Apache 1.3a1 or a later release in
   several forms, including a WinZip (<code>.zip</code>)
   archive. Although this contains the same files as the others (likely
   <code>.tar.gz</code> and <code>.tar.Z</code>), it is recommended for
   Windows use, as all the files contained therein will contain Windows
   line breaks. The other archives may contain files with Unix line
   breaks, which will not function on Windows (although they may).</p>

<h2><a name="comp">Compiling Apache for Windows</a></h2>

<p>Compiling Apache requires Microsoft Visual C++ 5.0 to be properly
   installed. It is easiest to compile with the command-line tools
   (nmake, etc...). Consult the VC++ manual to determine how to install
   them.</p>

<p>First, unpack the Apache distribution into an appropriate
   directory. Open a command-line prompt, and change to the
   <code>src</code> subdirectory of the Apache distribution.</p>

<p>The master Apache makefile instructions are contained in the
   <code>Makefile.nt</code> file. To compile Apache, simply use one of
   the following commands:
<ul>
<li><code>nmake /f Makefile.nt release</code>
<li><code>nmake /f Makefile.nt debug</code>
</ul>

<p>These will both compile Apache. The latter will include debugging
   information in the resulting files, making it easier to find bugs and
   track down problems.</p>

<p>Apache can also be compiled using VC++'s Visual Studio development
   environment. Although compiling Apache in this manner is not as simple,
   it makes it possible to easily modify the Apache source, or to compile
   Apache if the command-line tools are not installed.</p>

<p>Project files (<code>.DSP</code>) are included for each of the
   portions of Apache. The two projects that are necessary for Apache to
   run are <code>Apache.dsp</code> and <code>ApacheCore.dsp</code>. The
   <code>src\nt</code> subdirectory also contains project files for the
   optional modules (see below).</p>

<h2><a name="inst">Installing Apache for Windows</a></h2>

<p>Once Apache has been compiled, it needs to be installed in its server
   root directory. The hard-coded default is the <code>\Apache</code>
   directory, on the current hard drive. Another directory may be used,
   but the files will need to be installed manually.</p>

<p>To install the files into the </code>\Apache</code> directory
   automatically, use one the following nmake commands (see above):</p>
<ul>
<li><code>nmake /f Makefile.nt installr</code> (for release build)
<li><code>nmake /f Makefile.nt installd</code> (for debug build)
</ul>

<p>This will install the following:</p>

<ul>
  <li><code>\Apache\Apache.exe</code> - Apache executable
  <li><code>\Apache\ApacheCore.dll</code> - Main Apache shared library
  <li><code>\Apache\modules\ApacheModule*.dll</code> - Optional Apache
      modules (7 files)
  <li><code>\Apache\conf</code> - Empty configuration directory
  <li><code>\Apache\logs</code> - Empty logging directory
</ul>

<p>If you do not have nmake, or wish to install in a different directory,
   be sure to use a similar naming scheme.</p>

<h2><a name="use">Using Apache for Windows</a></h2>

<p>The first step is to set up Apache's configuration files. Default
   configuration files for Windows are located in the <code>conf</code>
   subdirectory in the Apache distribution, and are named
   <code>httpd.conf-dist-win</code>, <code>access.conf-dist-win</code>
   and <code>srm.conf-dist-win</code>. Move these into
   <code>\Apache\conf</code>, and rename them <code>httpd.conf</code>,
   <code>access.conf</code> and <code>srm.conf</code>, respectively.</p>

<p>Configuring Apache is nearly identical to the Unix version of Apache,
   so most of the standard <a href="./">Apache documentation</a> is
   applicable. A few things are, however, different:</p>

<ul>
  <li><p>Because Apache for Windows is multithreaded, it does not use a
      separate process for each request, as Apache does with
      Unix. Therefore, the "process"-management directives are different:
      <p><a href="mod/core.html#startservers">StartServers</a> - This
         tells the server how many processes to use. Unlike Unix, there
         will never be more than this number, and only one will be used
         at a time (the others will be held in reserve in case the main
         processes crashes or otherwise dies). The recommended default is
         <code>StartServers 3</code>.
      <p><a
         href="mod/core.html#maxrequestsperchild">MaxRequestsPerChild</a>
         - Like the Unix directive, this controls how many requests a
           process will serve before exiting. However, unlike Unix, a
           process serves all the requests at once, not just one, so if
           this is set, it is recommended that a very high number is
           used. The recommended default, <code>MaxRequestsPerChild
           0</code>, does not cause the process to ever exit.
      <p><a href="mode/core.html#threadsperchild">ThreadsPerChild</a> -
         This directive is new, and tells the server how many threads it
         should use. This is the maximum number of connections the server
         can handle at once; be sure and set this number high enough for
         your site if you get a lot of hits. The recommended default is
         <code>ThreadsPerChild 20</code>.</p>
  <li><p>The directives that accept filenames as arguments now must use
      Windows filenames instead of Unix ones. However, because Apache
      uses Unix-style names internally, you must use forward slashes, not
      backslashes. Drive letters can be used; if omitted, the drive with
      the Apache executable will be assumed.</p>
  <li><p>Apache for Windows contains the ability to load modules at runtime,
      without recompiling the server. If Apache is compiled normally, it
      will install a number of optional modules in the
      <code>\Apache\modules</code> directory. To activate these, or other
      modules, the new <a href="mod/mod_dll.html#loadmodule">LoadModule</a>
      directive must be used. For example, to active the status module,
      use the following (in addition to the status-activating directives
      in <code>access.conf</code>):</p>
<pre>
    LoadModule status_module modules/ApacheModuleStatus.dll
</pre>
      <p>Information on <a href="mod/mod_dll.html#creating">creating module
         DLLs</a> is also available.</p>
</ul>

<p>Once Apache is configured correctly, it is nearly ready to be
run. However, we recommend you copy the <code>icons</code> and
<code>htdocs</code> subdirectories from the Apache distribution to
<code>\Apache</code>. The latter is especially important, as it contains
the document root (what the server actually serves).

<p>Apache can be executed in one of two ways, directly from the command
   line, or as a Windows NT service. To run it from the command line, use
   the following command:
<pre>
    C:\Apache> <b>apache -s</b>
</pre>

<p>Apache will then execute, and will remain running until it is
   exited. To use Apache as a Windows NT service, use the following:</p>
<pre>
    C:\Apache> <b>apache -i</b>
</pre>
<p>Then open the Services control panel, and start the Apache service.</p>

<p>If you installed Apache in a server root other than
   <code>\Apache</code>, you must use the <code>-f</code> command-line
   option to specify the httpd.conf file, or the <code>-d</code> option
   to specify the server root.</p>

<!--#include virtual="footer.html" -->
</BODY>
</HTML>
