在Microsoft Windows中使用Apache
此文档阐述了如何在Microsoft Windows平台上安装、配置和运行Apache 2.2 。 如果你发现了bug,或者希望以其他方式作出贡献,请使用我们的bug报告页面。
本文档的大多数内容假定你是从一个二进制发布版安装Apache到Windows上。 如果你想自己编译Apache(可能有助于开发和跟踪bugs),参看编译Windows下的Apache。
基于当前的Windows版本状况,本文档使用到的缩写及其意义解释包括:
- Windows NT: 指所有基于NT核心的Microsoft Windows操作系统的版本,包括Windows NT, Windows 2000, Windows XP, Windows.NET Server 2003及后续版本。
- Windows 9x: 指所有定位于家庭使用的Microsoft Windows操作系统的版本,包括 Windows 95 , Windows 98, Windows ME 。
这里下载。
如果在NT 4.0上运行,建议安装Service Pack 6 ,因为Service Pack 4有众所周知的TCP/IP和Winsock完整性的问题,在以后的Service Pack中解决了这些问题。
http://httpd.apache.org/download.cgi上找到。那里会列出当前发行版本、 所有最近的alpha和beta测试版本以及镜像web站点和匿名ftp服务器的信息。
你应该下载带有.msi
扩展名的Apache for Windows版本。 这是一个单一的Microsoft Installer文件,包含了Apache ,可以立即安装并运行。 还有一个单独的.zip
文件只打包了源码, 可以用Microsoft Visual C++ (Visual Studio)工具来编译。
这里升级Microsoft Installer到2.0 ,在Windows NT 4.0和2000中,2.0的升级版在这里。Windows XP/2003不需要这个升级。
注意,使用这个安装包不能在同一个机器上安装两套Apache 2.2。 但是,在同一个机器上,安装一个1.3系列和一个2.2系列的Apache则没有问题。 如果你需要在同一个机器上安装两套不同的2.2版本, 则必须用代码编译和安装Apache
运行已下载的上述Apache .msi
文件。安装程序会要求提供下列信息:
Network Domain 你的服务器已经或者将要注册的DNS域名。比如你的服务器的全称DNS域名是
server.mydomain.net
,你应当在这里输入:mydomain.net
Server Name 你的服务器的全称DNS域名,如上情况你应当在这里输入:
server.mydomain.net
Administrator's Email Address 服务器管理员的email地址。这个地址将会在默认的出错页面上显示给客户端。
-
For whom to install Apache 如果你希望Apache在80端口监听,并被安装为服务(即使无人登陆,Apache仍将运行),就选择"
for All Users, on Port 80, as a Service - Recommended
";如果你希望将Apache安装为个人试验使用,或者已经有一个运行于80端口的WWW服务器,就选择"only for the Current User, on Port 8080, when started Manually
"。 -
The installation type 选择
Typical
会安装除开发模块需要使用的源码和库以外的所有内容。选择Custom
可以自定义安装哪些项目。完整安装大约需要13MB磁盘空间,这其中并不包含你的网站文件所用空间。 Where to install 安装Apache的文件夹,默认为
C:\Program Files\Apache Software Foundation
文件夹下的Apache2.2
子文件夹。
安装期间,Apache将会配置你所选择的安装目录下的conf
文件夹中的文件。 但是如果那个目录下已有同名文件存在,原有文件将不会被覆盖, 而相应的新文件将会被加上.default
扩展名。 所以,举例来说,如果conf\httpd.conf
已经存在,那么不会对它做任何改变, 而新版本conf\httpd.conf
的内容将会被写入文件conf\httpd.conf.default
。 安装完成以后你应该检查.default
文件中的内容看看有没有不同, 如果必要,更新你原有的配置文件。
而且,如果你已经有一个名为htdocs\index.html
的文件,它不会被覆盖掉 (也不会安装index.html.default
文件)。 这意味着你在一个旧版本Apache上安装新版本是安全的 (但是你必须在安装之前首先停掉原有服务器然后在安装完成后重新启动它)。
安装Apache以后,你应该编辑conf
目录下的配置文件。这些文件已在安装期间被配置好以便Apache能够从安装目录运行,文档目录被配置为安装目录下的子目录htdocs
。在你开始真正使用之前还有很多选项需要设置。但是为了尽快开始,可以使用安装时自动配置的配置文件。
指令索引察看全部可用指令。
Apache for Windows主要的不同点是:
-
因为Apache for Windows是多线程的,它并不像Unix版本那样为每个请求使用一个单独的进程。 而是通常运行两个Apache进程:一个父进程,和一个处理请求的子进程。在子进程内部由多个单独的线程来处理每个请求。
因此与进程管理相关的指令是不同的:
MaxRequestsPerChild
就像Unix版本中的指令一样,这条指令控制一个进程退出前将为多少个请求提供服务。 然而,与Unix不同的是,一个进程将为所有请求而不是只为一个请求服务,因此如果设置这条指令,建议将它设为一个很大的值。默认设置MaxRequestsPerChild 0
使得进程从不退出。警告: 启动新的子进程时将会重新读入服务器配置文件。如果你修改了httpd.conf
,新的子进程将有可能不能启动或者可能得到预期之外的结果。ThreadsPerChild
是一条新的指令,用来告诉服务器应该使用多少个线程,指明了服务器可以立刻处理的最大连接数;如果你的站点有大量的点击,请确认你设置了足够大的值。推荐的默认设置是ThreadsPerChild 50
。 -
接收文件名作为参数的指令必须使用Windows文件名而不是Unix文件名。 但是,因为Apache内部使用Unix风格的名字,你必须使用正斜杠而不是反斜杠。可以使用盘符;如果省略盘符,将假定使用Apache可执行文件所在盘符。
-
Apache for Windows具有运行时装入模块的能力,不需要重新编译。如果Apach在正常情况下编译,它会在
\Apache2.2\modules
目录下安装许多可选模块。 要激活它们或其他模块,必须使用新的LoadModule
指令。 举例来说,要激活状态模块,使用下列指令(除了access.conf
中的状态激活指令以外):LoadModule status_module modules/mod_status.so
也可使用创建可加载模块中的信息。
-
Apache也可以加载ISAPI(Internet Server Applications Programming Interface)扩展,例如被Microsoft IIS服务器和其他一些Windows服务器所使用的。这里有更多相关信息。注意Apache不能加载ISAPI 过滤器。
当运行CGI脚本时,Apache查找脚本解释器是由
ScriptInterpreterSource
指令配置的。-
由于在Windows下管理具有像
.htaccess
这样名字的文件是很困难的,你会发现在配置文件中使用AccessFilename
指令改变它的文件名是很有用的。 -
在Windows NT上,Apache启动时发生的错误将会记入Windows事件日志(event log)。这个机制将在Apache尚不能使用
error.log
文件的时候运作。你可以通过"事件查看器"的MMC接口查看Windows事件日志。注意,在Windows 9x上不存在事件日志机制,因此无法记录启动错误。
作为控制台程序运行Apache中的建议。
对于让Apache在Windows 9x下以类似Windows NT服务的方式运行有一些支持。都是高度试验性的,即使能够工作,Apache软件基金会将不会证实其可靠性和未来的支持。继续进行你自己的冒险吧!
这两种"服务"有相当大的区别:
如果你输入下列命令,Apache会尝试启动,如果成功他将在后台运行:
httpd -n "服务名" -k start
例如,通过桌面的快捷方式运行,如果服务启动成功一个控制台窗口会快速闪过并立刻消失。如果启动时Apache检测到比如httpd.conf
文件中有不正确的设置这样的问题,则控制台窗口会保持可见。这样将显示一个有助于追踪错误原因的错误信息。
Windows 9x不支持NET START
或者NET STOP
命令,因此你在命令中必须使用Apache的服务控制选项。你可能希望为每个命令设置一个快捷方式以便你能够只需要从开始菜单或者桌面一点就能执行所需的操作。
Apache和Windows 9x没有提供让Apache服务以特定的具有网络权限的用户身份运行的支持。实际上,Windows 9x在本地机器上根本没有提供安全性。这就是Apache软件基金会从不支持使用Windows 9x作为公用httpd服务器的原因。这个便利存在的唯一目的是协助用户开发web内容和学习Apache服务器,或者也许在一个安全的、私有的网络上充当intranet服务器。
ServerRoot值。
如果你没有使用 -f
或 -n
指定配置文件的路径,Apache将会使用硬编码在服务器内的路径,比如:conf\httpd.conf
。这个内置的路径是相对于安装目录的,要想检查这个内置的路径,你可以通过 -V
开关调用Apache ,查看名为SERVER_CONFIG_FILE
的变量值:
httpd -V
Apache将会按照下列顺序检查ServerRoot
值:
- 通过
-C
命令行开关指定的ServerRoot
值。 - 通过
-d
命令行开关指定的值。 - 当前工作目录。
- 安装二进制文件时在注册表中登记的项目。
- 编译进二进制文件的值,该值默认为:
/apache
,你可以使用httpd -V
命令查看显示出来的HTTPD_ROOT
变量的值。
在安装过程中,将会在注册表中新建一个版本特定的注册表键。这个键的位置取决于安装类型。如果你选择的是"for all users",那么将位于HKEY_LOCAL_MACHINE
分支下,如下所示:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Apache\2.2.4
如果你选择的是"for the current user only",那么将位于HKEY_CURRENT_USER
分支下,其中的内容取决于当前登陆的用户,如下所示:
HKEY_CURRENT_USER\SOFTWARE\Apache Software Foundation\Apache\2.2.4
这个键已经被编译进了服务器,使得你可以测试新版本而又不影响老版本。当然,你必须注意不要在同一个目录中安装两个不同的版本。
如果你没有使用二进制安装,在某些情况下Apache将会抱怨注册表键丢失。如果在这种情况下服务器仍然可以找到正确的配置文件,那么就可以安全的忽略它。
这个注册表键其实就是包含conf
子目录的ServerRoot
目录。Apache将要从中读取httpd.conf
文件。如果该配置文件中又包含了一个ServerRoot
指令,并且指向的目录与注册表中登记的不同,Apache将以配置文件中的指令为准。如果你复制了配置文件或者整个Apache目录到一个新的位置,你要千万记得修改httpd.conf
中的ServerRoot
指令,使其指向正确的位置。
Listen指令。 要连接到服务器访问默认页面,启动一个浏览器并输入下列URL :
http://localhost/
http://localhost/
应该出现一个欢迎页面,并且页面上有到Apache用户手册的链接。 如果什么都没有发生或是得到了一个错误,检查logs
子文件夹中的 error.log
文件。如果你的主机没有联网或者DNS配置有严重问题,你也许需要输入这样的URL :
http://127.0.0.1/
如果你将Apache配置为在非80端口监听(比如:8080),你应当使用下面的URL明确指定端口:
http://127.0.0.1:8080/
一旦你的基本配置可以工作了,你应该编辑conf
目录下的文件来恰当地配置Apache 。 此外,如果你改变了作为NT服务运行的Apache的配置,你应该首先尝试从命令行启动来保证能够正确地启动Apache服务。
因为Apache不能与其他TCP/IP应用程序共享同一端口,你可能需要先停止或者卸载或者重新配置某些特定的服务。这包括(但不限于)别的web服务器和BlackIce那样的防火墙。如果你只能在禁止其他服务的情况下启动Apache ,那么需要重新配置Apache或者其他程序使它们不监听同一个TCP/IP端口。