在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 。

在Microsoft Windows中使用Apache

对操作系统的要求
Apache 2.2被设计为在Windows NT上运行。它的二进制安装程序只能在x86处理器上运行,比如Intel和AMD的芯片。Apache可能也能够运行在Windows 9x上,但是并没有经过测试, 也不建议在实际工作的系统上这样使用。
任何情况下都必须确保TCP/IP网络协议已经安装。如果在Windows 95上运行,必须安装"Winsock2"升级补丁。 "Winsock2" for Windows 95可以在这里下载。
如果在NT 4.0上运行,建议安装Service Pack 6 ,因为Service Pack 4有众所周知的TCP/IP和Winsock完整性的问题,在以后的Service Pack中解决了这些问题。

在Microsoft Windows中使用Apache

下载 Apache for Windows
关于Apache最新版本的有关信息可以在http://httpd.apache.org/download.cgi上找到。那里会列出当前发行版本、 所有最近的alpha和beta测试版本以及镜像web站点和匿名ftp服务器的信息。
你应该下载带有.msi扩展名的Apache for Windows版本。 这是一个单一的Microsoft Installer文件,包含了Apache ,可以立即安装并运行。 还有一个单独的.zip文件只打包了源码, 可以用Microsoft Visual C++ (Visual Studio)工具来编译。

在Microsoft Windows中使用Apache

安装 Apache for Windows
Apache的安装需要有Microsoft Installer 1.2或更高版本。 在Windows 9x中,你可以从这里升级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, _disibledevent=>
在Microsoft Windows中使用Apache

配置 Apache for Windows
与Unix系统下的版本一样,Apache使用conf目录下的文件进行配置,但是Windows版本有几个不同的指令,参见指令索引察看全部可用指令。
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上不存在事件日志机制,因此无法记录启动错误。

在Microsoft Windows中使用Apache

以服务方式运行Apache for Windows
Apache仅能够在Windows NT上作为服务运行。
你可以选择在安装Apache时自动将其安装为一个服务。如果你选择"for all users",那么Apache将会被安装为服务。如果你选择了"only for the Current User",你可以在安装后手动将Apache注册为服务。注意,你必须是Administrators组的成员才能成功注册服务。
使用Apache Service Monitor工具,可以查看和管理你所在网络上的所有机器上安装的Apache服务的状态。为了能够使用这个工具管理Apache服务,你必须首先自动或手动安装Apache服务。
你可以在Apache安装目录的bin子目录下,使用如下命令将Apache安装为Windows NT服务:
httpd -k install
如果你想指定服务的名称,可以使用下面的命令。当你在同一机器上安装多个Apache服务时,你必须为它们指定不同的名字。
httpd -k install -n "服务名"
如果你想为不同名称的服务使用不同的配置文件,则安装时需要指定配置文件:
httpd -k install -n "服务名" -f "c:\files\my.conf"
如果你使用的是第一个命令,也就是除 -k install 外没有其它命令行参数,那么被安装的服务名称将是:Apache2.2 ,配置文件将使用conf\httpd.conf 。
要移除一个Apache服务很简单:
httpd -k uninstall
或者使用下述命令移除特定名称的Apache服务:
httpd -k uninstall -n "服务名"
通常,启动、重启、关闭Apache服务的方法是使用Apache Service Monitor工具,另外也可以使用控制台命令:NET START Apache2.2 和 NET STOP Apache2.2 或者通过Windows服务控制面板。在启动Apache服务之前,你应当使用下面的命令检查一下配置文件的正确性:
httpd -n "服务名" -t
你可以通过命令行开关来控制Apache服务。要启动一个已经安装的Apache服务,可以使用:
httpd -k start
要停止一个已经安装的Apache服务,可以使用:
httpd -k stop

httpd -k shutdown
要重启一个运行中的Apache服务,强制它重新读取配置文件,可以使用:
httpd -k restart
默认情况下,Apache服务将被注册为以本地系统用户(LocalSystem帐号)身份运行。LocalSystem帐号没有网络权限,不能通过任何Windows安全机制访问网络,包括文件系统、命名管道、DCOM或secure RPC ,但是它对于本地资源却拥有广泛的特权。
永远不要把网络权限授予LocalSystem帐号!如果你需要Apache能够访问网络资源,最好按照下述方法为Apache另外建立一个单独的帐号。
你应该建立一个单独的帐号来运行Apache服务。特别是在必须通过Apache访问网络资源的时候,我们更加强烈建议你这样做。
创建一个普通域用户帐号,并牢记对应的密码。 授予这个新建的帐号作为服务登陆和作为操作系统一部分运行权限。在Windows 2000/XP/2003上你可以使用"组策略"或通过"本地安全策略"的MMC接口来完成这个操作。 确认新建的帐号是Users组的一个成员。 确认新建的帐号具有读取和执行(RX)所有文档和脚本目录(例如:htdocs和cgi-bin)的权限。 确认新建的帐号对Apache的logs目录具有读/写/删除(RWD)的权限。 确认新建的帐号对httpd.exe二进制文件具有读取和执行(RX)的权限。
一个很好的实践经验是赋予运行Apache服务的用户读取和执行(RX)整个Apache2.2目录的权限,并且对logs子目录具有读/写/删除(RWD)的权限。
如果你允许使用这个帐号作为一个用户和服务登录,你就可以用这个帐号登录上去测试执行脚本、读取web页的权限,还可以通过控制台窗口启动Apache 。如果这样工作正常,你又执行了上述的操作,那么Apache就能够正常地作为服务运行了。
错误代码2186是一个很好的提示,说明你需要检查"登陆为"选项,因为服务器不能访问必要的网络资源。
当启动Apache服务时你可能会遇到一个来自Windows服务管理器的错误信息。 例如,如果你想使用控制面板中的服务小程序启动Apache,可能会得到下面这条信息:
Could not start the Apache2.2 service _disibledevent=>
在Microsoft Windows中使用Apache

作为控制台程序运行Apache
虽然通常推荐将Apache作为服务来运行,但是在某些情况下从命令行运行反而更加容易。在Windows 9x上,从命令行运行Apache是推荐的方法,因为这些系统中缺乏可靠的服务支持。
可以使用下列命令将Apache作为控制台程序从命令行运行:
httpd
Apache将会一直保持运行,直到被Ctl+C组合键中断。
你还可以在安装后通过 开始按钮 --> 程序 --> Apache HTTP Server 2.2.xx --> Control Apache Server 在控制台中运行Apache 。这将会打开一个控制台窗口并在其中启动Apache 。如果你没有将Apache安装为服务,该窗口将一直保持打开,直到被Ctl+C组合键中断,并在几秒钟后退出。如果你已经将Apache安装为服务,那么那个快捷方式将会启动服务,如果Apache服务已经启动了,则什么也不做。
你可以在另外一个控制台窗口中输入以下命令停止正在运行的Apache服务:
httpd -k shutdown
这种方法比使用Ctl+C组合键更好,因为它可以让Apache完成所有当前的操作并且优雅的清理所占用的资源。
Apache可以被重新启动,这将导致它重新读取配置文件,重启前所有正在进行的操作都将不被打断的完成。可以使用下面的命令重启Apache
httpd -k restart
请熟悉Unix版本Apache的用户注意,这些命令对应于Unix命令 kill -TERM pid 和 kill -USR1 pid 。命令中之所以使用 -k 选项,就是为了提醒用户这是源自Unix下的kill命令。
如果Apache控制台窗口在启动后出乎意料的立即关闭,请打开一个新的控制台窗口,切换到Apache的安装目录下bin子目录中,运行httpd命令并读取错误信息。然后再到日志目录中查看error.log文件以寻找可能的配置错误。如果你的Apache采用的是默认安装,这些命令应当是:
c:
cd "\Program Files\Apache Software Foundation\Apache2.2\bin"
httpd
等候Apache停止,或者使用Ctl+C组合键,然后输入下列内容:
cd ..\logs
more < error.log
可以在命令行中为Apache指定一个配置文件,有两种方法可以在命令行中指定配置文件:
-f 可以指定一个绝对路径或相对路径的配置文件:
httpd -f "c:\my server files\anotherconfig.conf"

httpd -f files\anotherconfig.conf
-n 可以指定已安装的Apache服务所使用的配置文件:
httpd -n "服务名"
在这两种情况下,必须在配置文件中设置正确的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 _disibledevent=>
在Microsoft Windows中使用Apache

安装的测试
启动Apache运行以后(不管是控制台窗口还是作为服务), 它会在80端口上进行监听(除非你改变了配置文件中的Listen指令。 要连接到服务器访问默认页面,启动一个浏览器并输入下列URL :
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端口。&#65279;
Tags: 

延伸阅读

最新评论

发表评论