| <?xml version="1.0" encoding="UTF-8" ?> | |
| <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> | |
| <!-- $LastChangedRevision$ --> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <manualpage metafile="windows.xml.meta"> | |
| <parentdocument href="./">Platform Specific Notes</parentdocument> | |
| <title>Using Apache HTTP Server on Microsoft Windows</title> | |
| <summary> | |
| <p>This document explains how to install, configure and run | |
| Apache HTTP Server 2.&httpd.minor; under Microsoft Windows. If you have questions after | |
| reviewing the documentation (and any event and error logs), you | |
| should consult the peer-supported | |
| <a href="http://httpd.apache.org/userslist.html">users' mailing | |
| list</a>.</p> | |
| <p>This document assumes that you are installing a binary | |
| distribution of httpd. If you want to compile Apache httpd yourself | |
| (possibly to help with development or tracking down bugs), | |
| see <a href="win_compiling.html">Compiling httpd for Microsoft | |
| Windows</a>.</p> | |
| </summary> | |
| <section id="req"> | |
| <title>Operating System Requirements</title> | |
| <p>The primary Windows platform for running Apache httpd 2.&httpd.minor; is Windows | |
| 2000 or later. Always obtain and | |
| install the current service pack to avoid operating system bugs.</p> | |
| <note>Apache HTTP Server versions later than 2.2 will not run on any | |
| operating system earlier than Windows 2000.</note> | |
| </section> | |
| <section id="down"> | |
| <title>Downloading httpd for Windows</title> | |
| <p>The Apache HTTP Server Project itself does not provide binary releases of | |
| software, only source code. Individual committers <em>may</em> provide | |
| binary packages as a convenience, but it is not a release deliverable.</p> | |
| <p>If you cannot compile the Apache HTTP Server | |
| yourself, you can obtain a binary package from numerous binary distributions | |
| available on the Internet.</p> | |
| <p>Popular options for deploying Apache httpd, and, optionally, PHP | |
| and MySQL, on Microsoft Windows, include:</p> | |
| <ul> | |
| <li><a href="http://www.apachelounge.com/download/">Apache Lounge</a></li> | |
| <li><a href="http://www.wampserver.com/">WampServer</a></li> | |
| </ul> | |
| </section> | |
| <section id="cust"> | |
| <title>Customizing httpd for Windows</title> | |
| <p>Apache httpd is configured by the files in the <code>conf</code> | |
| subdirectory. These are the same files used to configure the Unix | |
| version, but there are a few different directives for httpd on | |
| Windows. See the <a href="../mod/directives.html">directive index</a> | |
| for all the available directives.</p> | |
| <p>The default configuration of the source distribution expects the server | |
| to be installed into \Apache2x. This can be customized at compilation time, | |
| but it's important that ultimately the <directive>ServerRoot</directive> in | |
| httpd.conf match the actual installation root. Binary distributions may | |
| customize either the default installation root or the overall layout of | |
| the initial configuration.</p> | |
| <p>The main differences in httpd for Windows are:</p> | |
| <ul> | |
| <li><p>Because httpd for Windows is multithreaded, it does not | |
| use a separate process for each request, as httpd can on Unix. | |
| Instead there are usually only two httpd processes running: a | |
| parent process, and a child which handles the requests. Within | |
| the child process each request is handled by a separate thread. | |
| </p> | |
| <p>The process management directives are also different:</p> | |
| <p><directive module="mpm_common">MaxConnectionsPerChild</directive>: | |
| Like the Unix directive, this controls how many connections a single | |
| child process will serve before exiting. | |
| However, unlike on Unix, a replacement process is not instantly | |
| available. Use the default <code>MaxConnectionsPerChild 0</code>, | |
| unless instructed to change the behavior to overcome a memory leak | |
| in third party modules or in-process applications.</p> | |
| <note type="warning"><strong>Warning: The server configuration | |
| file is reread when a new child process is started. If you have | |
| modified <code>httpd.conf</code>, the new child may not start or | |
| you may receive unexpected results.</strong></note> | |
| <p><directive module="mpm_common">ThreadsPerChild</directive>: | |
| This directive is new. It tells the server how many threads it | |
| should use. This is the maximum number of connections the server | |
| can handle at once, so be sure to set this number high enough for | |
| your site if you get a lot of hits. The recommended default is | |
| <code>ThreadsPerChild 150</code>, but this must be adjusted to | |
| reflect the greatest anticipated number of simultaneous | |
| connections to accept.</p></li> | |
| <li><p>The directives that accept filenames as arguments must use | |
| Windows filenames instead of Unix ones. However, because httpd | |
| may interpret backslashes as an "escape character" sequence, you | |
| should consistently use forward slashes in path names, not | |
| backslashes.</p></li> | |
| <li><p>While filenames are generally case-insensitive on | |
| Windows, URLs are still treated internally as case-sensitive | |
| before they are mapped to the filesystem. For example, the | |
| <directive module="core" type="section">Location</directive>, | |
| <directive module="mod_alias">Alias</directive>, and <directive | |
| module="mod_proxy">ProxyPass</directive> directives all use | |
| case-sensitive arguments. For this reason, it is particularly | |
| important to use the <directive module="core" | |
| type="section">Directory</directive> directive when attempting | |
| to limit access to content in the filesystem, since this | |
| directive applies to any content in a directory, regardless of | |
| how it is accessed. If you wish to assure that only lowercase | |
| is used in URLs, you can use something like:</p> | |
| <highlight language="config"> | |
| RewriteEngine On | |
| RewriteMap lowercase "int:tolower" | |
| RewriteCond "%{REQUEST_URI}" "[A-Z]" | |
| RewriteRule "(.*)" "${lowercase:$1}" [R,L] | |
| </highlight></li> | |
| <li><p>When running, httpd needs write access only to the logs | |
| directory and any configured cache directory tree. Due to the | |
| issue of case insensitive and short 8.3 format names, httpd must | |
| validate all path names given. This means that each directory | |
| which httpd evaluates, from the drive root up to the directory | |
| leaf, must have read, list and traverse directory permissions. | |
| If Apache2.&httpd.minor; is installed at C:\Program Files, then the root | |
| directory, Program Files and Apache2.&httpd.minor; must all be visible | |
| to httpd.</p></li> | |
| <li><p>httpd for Windows contains the ability to load modules at | |
| runtime, without recompiling the server. If httpd is compiled | |
| normally, it will install a number of optional modules in the | |
| <code>\Apache2.&httpd.minor;\modules</code> directory. To activate these or | |
| other modules, the <directive module="mod_so">LoadModule</directive> | |
| directive must be used. For example, to activate the status | |
| module, use the following (in addition to the status-activating | |
| directives in <code>access.conf</code>):</p> | |
| <highlight language="config"> | |
| LoadModule status_module "modules/mod_status.so" | |
| </highlight> | |
| <p>Information on <a href="../mod/mod_so.html#creating">creating | |
| loadable modules</a> is also available.</p></li> | |
| <li><p>httpd can also load ISAPI (Internet Server Application | |
| Programming Interface) extensions such as those used by Microsoft | |
| IIS and other Windows servers. <a href="../mod/mod_isapi.html">More | |
| information is available</a>. Note that httpd <strong>cannot</strong> | |
| load ISAPI Filters, and ISAPI Handlers with some Microsoft feature | |
| extensions will not work.</p></li> | |
| <li><p>When running CGI scripts, the method httpd uses to find | |
| the interpreter for the script is configurable using the | |
| <directive module="core">ScriptInterpreterSource</directive> | |
| directive.</p></li> | |
| <li><p>Since it is often difficult to manage files with names | |
| like <code>.htaccess</code> in Windows, you may find it useful to | |
| change the name of this per-directory configuration file using | |
| the <directive module="core">AccessFilename</directive> | |
| directive.</p></li> | |
| <li><p>Any errors during httpd startup are logged into the | |
| Windows event log when running on Windows NT. This mechanism | |
| acts as a backup for those situations where httpd is not yet | |
| prepared to use the <code>error.log</code> file. You can | |
| review the Windows Application Event Log by using the Event Viewer, | |
| e.g. Start - Settings - Control Panel - Administrative Tools | |
| - Event Viewer.</p></li> | |
| </ul> | |
| </section> | |
| <section id="winsvc"> | |
| <title>Running httpd as a Service</title> | |
| <p>Apache httpd comes with a utility called the Apache Service Monitor. | |
| With it you can see and manage the state of all installed httpd | |
| services on any machine on your network. To be able to manage an | |
| httpd service with the monitor, you have to first install the | |
| service (either automatically via the installation or manually). | |
| </p> | |
| <p>You can install httpd as a Windows NT service as follows from | |
| the command prompt at the httpd <code>bin</code> subdirectory:</p> | |
| <example> | |
| httpd.exe -k install | |
| </example> | |
| <p>If you need to specify the name of the service you want to | |
| install, use the following command. You have to do this if you | |
| have several different service installations of httpd on your | |
| computer. If you specify a name during the install, you have to | |
| also specify it during any other -k operation.</p> | |
| <example> | |
| httpd.exe -k install -n "MyServiceName" | |
| </example> | |
| <p>If you need to have specifically named configuration files for | |
| different services, you must use this:</p> | |
| <example> | |
| httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf" | |
| </example> | |
| <p>If you use the first command without any special parameters except | |
| <code>-k install</code>, the service will be called <code>Apache2.&httpd.minor;</code> | |
| and the configuration will be assumed to be <code>conf\httpd.conf</code>. | |
| </p> | |
| <p>Removing an httpd service is easy. Just use:</p> | |
| <example> | |
| httpd.exe -k uninstall | |
| </example> | |
| <p>The specific httpd service to be uninstalled can be specified by using:</p> | |
| <example> | |
| httpd.exe -k uninstall -n "MyServiceName" | |
| </example> | |
| <p>Normal starting, restarting and shutting down of an httpd | |
| service is usually done via the Apache Service Monitor, by using | |
| commands like <code>NET START Apache2.&httpd.minor;</code> and <code>NET STOP | |
| Apache2.&httpd.minor;</code> or via normal Windows service management. Before | |
| starting httpd as a service by any means, you should test the | |
| service's configuration file by using:</p> | |
| <example> | |
| httpd.exe -n "MyServiceName" -t | |
| </example> | |
| <p>You can control an httpd service by its command line switches, | |
| too. To start an installed httpd service you'll use this:</p> | |
| <example> | |
| httpd.exe -k start -n "MyServiceName" | |
| </example> | |
| <p>To stop an httpd service via the command line switches, use | |
| this:</p> | |
| <example> | |
| httpd.exe -k stop -n "MyServiceName" | |
| </example> | |
| <p>or</p> | |
| <example> | |
| httpd.exe -k shutdown -n "MyServiceName" | |
| </example> | |
| <p>You can also restart a running service and force it to reread | |
| its configuration file by using:</p> | |
| <example> | |
| httpd.exe -k restart -n "MyServiceName" | |
| </example> | |
| <p>By default, all httpd services are registered to run as the | |
| system user (the <code>LocalSystem</code> account). The | |
| <code>LocalSystem</code> account has no privileges to your network | |
| via any Windows-secured mechanism, including the file system, named | |
| pipes, DCOM, or secure RPC. It has, however, wide privileges locally. | |
| </p> | |
| <note type="warning"><strong>Never grant any network privileges to | |
| the <code>LocalSystem</code> account! If you need httpd to be able | |
| to access network resources, create a separate account for httpd as | |
| noted below.</strong></note> | |
| <p>It is recommended that users create a separate account for running | |
| httpd service(s). If you have to access network resources via httpd, | |
| this is required.</p> | |
| <ol> | |
| <li>Create a normal domain user account, and be sure to | |
| memorize its password.</li> | |
| <li>Grant the newly-created user a privilege of <code>Log on | |
| as a service</code>. | |
| </li> | |
| <li>Confirm that the created account is a member of the Users | |
| group.</li> | |
| <li>Grant the account read and execute (RX) rights to all document | |
| and script folders (<code>htdocs</code> and <code>cgi-bin</code> | |
| for example).</li> | |
| <li>Grant the account change (RWXD) rights to the | |
| httpd <code>logs</code> directory.</li> | |
| <li>Grant the account read and execute (RX) rights to the | |
| <code>httpd.exe</code> binary executable.</li> | |
| </ol> | |
| <note>It is usually a good practice to grant the user the httpd | |
| service runs as read and execute (RX) access to the whole Apache2.&httpd.minor; | |
| directory, except the <code>logs</code> subdirectory, where the | |
| user has to have at least change (RWXD) rights.</note> | |
| <p>If you allow the account to log in as a user and as a service, | |
| then you can log on with that account and test that the account has | |
| the privileges to execute the scripts, read the web pages, and that | |
| you can start httpd in a console window. If this works, and you | |
| have followed the steps above, httpd should execute as a service | |
| with no problems.</p> | |
| <note><strong>Error code 2186</strong> is a good indication that | |
| you need to review the "Log On As" configuration for the service, | |
| since httpd cannot access a required network resource. Also, pay | |
| close attention to the privileges of the user httpd is | |
| configured to run as.</note> | |
| <p>When starting httpd as a service you may encounter an error | |
| message from the Windows Service Control Manager. For example, | |
| if you try to start httpd by using the Services applet in the | |
| Windows Control Panel, you may get the following message:</p> | |
| <example> | |
| Could not start the Apache2.&httpd.minor; service on \\COMPUTER <br /> | |
| Error 1067; The process terminated unexpectedly. | |
| </example> | |
| <p>You will get this generic error if there is any problem with | |
| starting the httpd service. In order to see what is really causing | |
| the problem you should follow the instructions for Running httpd | |
| for Windows from the Command Prompt.</p> | |
| <p>If you are having problems with the service, it is suggested | |
| you follow the instructions below to try starting httpd.exe from | |
| a console window, and work out the errors before struggling to | |
| start it as a service again.</p> | |
| </section> | |
| <section id="wincons"> | |
| <title>Running httpd as a Console Application</title> | |
| <p>Running Apache httpd as a service is usually the recommended way to | |
| use it, but it is sometimes easier to work from the command line, | |
| especially during initial configuration and testing.</p> | |
| <p>To run httpd from the command line as a console application, | |
| use the following command:</p> | |
| <example> | |
| httpd.exe | |
| </example> | |
| <p>httpd will execute, and will remain running until it is stopped | |
| by pressing Control-C.</p> | |
| <p>You can also run httpd via the shortcut Start Apache in Console | |
| placed to <code>Start Menu --> Programs --> Apache HTTP Server | |
| 2.&httpd.minor;.xx --> Control Apache Server</code> during the installation. | |
| This will open a console window and start httpd inside it. If you | |
| don't have httpd installed as a service, the window will remain | |
| visible until you stop httpd by pressing Control-C in the console | |
| window where httpd is running in. The server will exit in a few | |
| seconds. However, if you do have httpd installed as a service, the | |
| shortcut starts the service. If the httpd service is running | |
| already, the shortcut doesn't do anything.</p> | |
| <p>If httpd is running as a service, you can tell it to stop by opening another console | |
| window and entering:</p> | |
| <example> | |
| httpd.exe -k shutdown | |
| </example> | |
| <p>Running as a service should be preferred over running in a | |
| console window because this lets httpd end any current operations | |
| and clean up gracefully.</p> | |
| <p>But if the server is running in a console window, you can | |
| only stop it by pressing Control-C in the same window.</p> | |
| <p>You can also tell httpd to restart. This forces it to reread | |
| the configuration file. Any operations in progress are allowed to | |
| complete without interruption. To restart httpd, either press | |
| Control-Break in the console window you used for starting httpd, | |
| or enter</p> | |
| <example> | |
| httpd.exe -k restart | |
| </example> | |
| <p>if the server is running as a service.</p> | |
| <note>Note for people familiar with the Unix version of httpd: | |
| these commands provide a Windows equivalent to <code>kill -TERM | |
| <em>pid</em></code> and <code>kill -USR1 <em>pid</em></code>. The | |
| command line option used, <code>-k</code>, was chosen as a reminder | |
| of the <code>kill</code> command used on Unix.</note> | |
| <p>If the httpd console window closes immediately or unexpectedly | |
| after startup, open the Command Prompt from the Start Menu --> | |
| Programs. Change to the folder to which you installed httpd, type | |
| the command <code>httpd.exe</code>, and read the error message. Then | |
| change to the logs folder, and review the <code>error.log</code> | |
| file for configuration mistakes. Assuming httpd was installed into | |
| <code>C:\Program Files\Apache Software Foundation\Apache2.&httpd.minor;\</code>, | |
| you can do the following:</p> | |
| <example> | |
| c: <br /> | |
| cd "\Program Files\Apache Software Foundation\Apache2.&httpd.minor;\bin" <br /> | |
| httpd.exe | |
| </example> | |
| <p>Then wait for httpd to stop, or press Control-C. Then enter the | |
| following:</p> | |
| <example> | |
| cd ..\logs <br /> | |
| more < error.log | |
| </example> | |
| <p>When working with httpd it is important to know how it will | |
| find the configuration file. You can specify a configuration file | |
| on the command line in two ways:</p> | |
| <ul> | |
| <li><p><code>-f</code> specifies an absolute or relative path to | |
| a particular configuration file:</p> | |
| <example> | |
| httpd.exe -f "c:\my server files\anotherconfig.conf" | |
| </example> | |
| <p>or</p> | |
| <example> | |
| httpd.exe -f files\anotherconfig.conf | |
| </example></li> | |
| <li><p><code>-n</code> specifies the installed httpd service | |
| whose configuration file is to be used:</p> | |
| <example> | |
| httpd.exe -n "MyServiceName" | |
| </example> | |
| </li> | |
| </ul> | |
| <p>In both of these cases, the proper | |
| <directive module="core">ServerRoot</directive> should be set in | |
| the configuration file.</p> | |
| <p>If you don't specify a configuration file with <code>-f</code> | |
| or <code>-n</code>, httpd will use the file name compiled into the | |
| server, such as <code>conf\httpd.conf</code>. This built-in path | |
| is relative to the installation directory. You can verify the compiled | |
| file name from a value labeled as <code>SERVER_CONFIG_FILE</code> when | |
| invoking httpd with the <code>-V</code> switch, like this:</p> | |
| <example> | |
| httpd.exe -V | |
| </example> | |
| <p>httpd will then try to determine its <directive module="core" | |
| >ServerRoot</directive> by trying the following, in this order:</p> | |
| <ol> | |
| <li>A <directive module="core">ServerRoot</directive> directive | |
| via the <code>-C</code> command line switch.</li> | |
| <li>The <code>-d</code> switch on the command line.</li> | |
| <li>Current working directory.</li> | |
| <li>A registry entry which was created if you did a binary | |
| installation.</li> | |
| <li>The server root compiled into the server. This is <code> | |
| /apache</code> by default, you can verify it by using <code> | |
| httpd.exe -V</code> and looking for a value labeled as | |
| <code>HTTPD_ROOT</code>.</li> | |
| </ol> | |
| <p>If you did not do a binary install, httpd will in some | |
| scenarios complain about the missing registry key. This warning can | |
| be ignored if the server was otherwise able to find its | |
| configuration file.</p> | |
| <p>The value of this key is the | |
| <directive module="core">ServerRoot</directive> directory which | |
| contains the <code>conf</code> subdirectory. When httpd starts it | |
| reads the <code>httpd.conf</code> file from that directory. If | |
| this file contains a <directive module="core">ServerRoot</directive> | |
| directive which contains a different directory from the one | |
| obtained from the registry key above, httpd will forget the | |
| registry key and use the directory from the configuration file. If | |
| you copy the httpd directory or configuration files to a new | |
| location it is vital that you update the | |
| <directive module="core">ServerRoot</directive> directive in the | |
| <code>httpd.conf</code> file to reflect the new location.</p> | |
| </section> | |
| <section id="test"> | |
| <title>Testing the Installation</title> | |
| <p>After starting Apache httpd (either in a console window or as a | |
| service) it will be listening on port 80 (unless you changed the | |
| <directive module="mpm_common">Listen</directive> directive in the | |
| configuration files or installed httpd only for the current user). | |
| To connect to the server and access the default page, launch a | |
| browser and enter this URL:</p> | |
| <example> | |
| http://localhost/ | |
| </example> | |
| <p>httpd should respond with a welcome page and you should see | |
| "It Works!". If nothing happens or you get an error, look in the | |
| <code>error.log</code> file in the <code>logs</code> subdirectory. | |
| If your host is not connected to the net, or if you have serious | |
| problems with your DNS (Domain Name Service) configuration, you | |
| may have to use this URL:</p> | |
| <example> | |
| http://127.0.0.1/ | |
| </example> | |
| <p>If you happen to be running httpd on an alternate port, you | |
| need to explicitly put that in the URL:</p> | |
| <example> | |
| http://127.0.0.1:8080/ | |
| </example> | |
| <p>Once your basic installation is working, you should configure it | |
| properly by editing the files in the <code>conf</code> subdirectory. | |
| Again, if you change the configuration of the Windows NT service | |
| for httpd, first attempt to start it from the command line to | |
| make sure that the service starts with no errors.</p> | |
| <p>Because httpd <strong>cannot</strong> share the same port with | |
| another TCP/IP application, you may need to stop, uninstall or reconfigure | |
| certain other services before running httpd. These conflicting | |
| services include other WWW servers, some firewall implementations, | |
| and even some client applications (such as Skype) which will use port | |
| 80 to attempt to bypass firewall issues.</p> | |
| </section> | |
| <section id="windrivemap"> | |
| <title>Configuring Access to Network Resources</title> | |
| <p>Access to files over the network can be specified using two | |
| mechanisms provided by Windows:</p> | |
| <dl> | |
| <dt>Mapped drive letters</dt> | |
| <dd>e.g., <code>Alias /images/ Z:/</code></dd> | |
| <dt>UNC paths</dt> | |
| <dd>e.g., <code>Alias /images/ //imagehost/www/images/</code></dd> | |
| </dl> | |
| <p>Mapped drive letters allow the administrator to maintain the | |
| mapping to a specific machine and path outside of the Apache httpd | |
| configuration. However, these mappings are associated only with | |
| interactive sessions and are not directly available to Apache httpd | |
| when it is started as a service. <strong>Use only UNC paths for | |
| network resources in httpd.conf</strong> so that the resources can | |
| be accessed consistently regardless of how Apache httpd is started. | |
| (Arcane and error prone procedures may work around the restriction | |
| on mapped drive letters, but this is not recommended.)</p> | |
| <example><title>Example DocumentRoot with UNC path</title> | |
| <highlight language="config"> | |
| UNCList dochost | |
| DocumentRoot "//dochost/www/html/" | |
| </highlight> | |
| </example> | |
| <example><title>Example DocumentRoot with IP address in UNC path</title> | |
| <highlight language="config"> | |
| UNCList 192.168.1.50 | |
| DocumentRoot "//192.168.1.50/docs/" | |
| </highlight> | |
| </example> | |
| <example><title>Example Alias and corresponding Directory with UNC path</title> | |
| <highlight language="config"> | |
| UNCList imagehost1 imagehost2 | |
| Alias "/images/" "//imagehost/www/images/" | |
| Alias "/images2/" "//imagehost2/www/images/" | |
| <Directory "//imagehost/www/images/"> | |
| #... | |
| </Directory> | |
| <Directory "//imagehost2/www/images/"> | |
| #... | |
| </Directory> | |
| </highlight> | |
| </example> | |
| <p>When running Apache httpd as a service, you must create a | |
| separate account in order to access network resources, as described | |
| above.</p> | |
| </section> | |
| <section id="tuning"> | |
| <title>Windows Tuning</title> | |
| <ul> | |
| <li><p>If more than a few dozen piped loggers are used on an operating system | |
| instance, scaling up the "desktop heap" is often necessary. For | |
| more detailed information, refer to the <a href="../logs.html#piped" | |
| >piped logging</a> documentation.</p></li> | |
| </ul> | |
| </section> | |
| </manualpage> |