Apache HTTP服务器 2.0版本
此文档解释了如何在Microsoft Windows平台上安装、配置和运行Apache 2.0。 如果你发现了bug,或者希望以其他方式作出贡献, 请使用我们的bug报告页面。
本文档的大多数内容假定你是从一个二进制发布版安装Apache到Windows上。 如果你想自己编译Apache(可能有助于开发和跟踪bugs),参看编译Windows下的Apache。
现在,对Windows 9x的支持是不完善的。 当前Apache 2.0并不期望在Windows 9x平台上运行。 如果你有兴趣在那方面给于帮助,请看开发者站点上的如何加入主题的信息。 将来可能会因为某些原因提供这方面的支持, 我们欢迎提供使Apache能够运行在Windows 9x上的补丁。
本文档使用到的缩写及其意义解释包括:
Apache 2.0被设计为在Windows NT 4.0和Windows 2000上运行。 它的二进制安装程序只能在x86族的处理器上运行,比如Intel芯片。 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中解决了这些问题。
关于Apache最新版本的有关信息可以在位于http://httpd.apache.org/ 的Apache web服务器上找到。那里会列出当前发行版本、 所有最近的alpha和beta测试发行版本以及镜像web站点和匿名ftp服务器的信息。
你应该下载带有.msi
扩展名的Apache for Windows版本。
这是一个单一的Microsoft Installer文件,包含了Apache,可以立即安装并运行。
还有一个单独的.zip
文件只打包了源码,
可以用Microsoft Visual C++ (Visual Studio)工具来编译。
Apache的安装需要有Microsoft Installer 1.2或更高版本。 在Windows 9x中,你可以从这里 升级Microsoft Installer到2.0,在Windows NT 4.0和2000中,2.0的升级版在这里. Windows XP不需要这个升级。
注意,使用这个安装包不能在同一个机器上安装两套Apache 2.0。 但是,在同一个机器上,安装一个1.3系列和一个2.0系列的Apache则没有问题。 如果你需要在同一个机器上安装两套不同的2.0版本, 则必须用代码编译和安装Apache.
运行已下载的上述Apache .msi
文件。安装程序会要求提供下列信息:
\Program Files\Apache Group\Apache
,
虽然你可以把它指定为任何其他文件夹)安装期间,Apache将会配置你所选择安装目录下的conf
文件夹中的文件。
但是如果那个目录下已有同名文件存在,原有文件将不会被覆盖,
而新的相应的文件将会被加上.default
扩展名。
所以,举例来说,如果conf\httpd.conf
已经存在,那么不会对它做任何改变,
而新版本http.conf的内容将会被写入文件conf\httpd.conf.default
。
安装完成以后你应该检查.default
文件中的内容看看有没有不同,
如果必要,更新你原有的配置文件。
而且,如果你已经有一个名为htdocs\index.html
的文件,它也不会被覆盖掉
(也不会安装index.html.default
文件)。
这意味着你在一个旧版本Apache上安装新版本是安全的
(但是你必须在安装之前首先停掉原有服务器然后在安装完成后再启动服务器)。
安装Apache以后,要求你应该编辑conf
目录下的配置文件。这些
文件已在安装期间被配置以便Apache能够从安装目录运行,文档目录被配置为安装
目录下的子目录htdocs
。在你开始真正使用之前还有很多选项需要设
置。但是为了尽快开始,可以使用安装时自动配置的配置文件。
Apache使用conf
目录下的文件进行配置,与Unix系统下的版本一样,
但是Windows版本有几个不同的指令,可阅读Apache
文档察看全部可用指令。
Apache for Windows主要的不同点是:
因为Apache for Windows是多线程的,它并不像Unix版本那样为每个请求使用一个单独的进程。 而是通常运行两个Apache进程:一个父进程,和一个处理请求的子进程。 在子进程内部由单独的线程来处理每个请求。
因此"process"-管理指令族是不同的:
MaxRequestsPerChild
- 就像在Unix版本中的相同指令,这条指令控制一个进程退出前将为多少个请求提供服务。
然而,与Unix不同的是,一个进程将即时为所有请求而不是只为一个请求服务,
因此如果设置这条指令,建议将它设为一个很大的值。
缺省的设置,MaxRequestsPerChild 0
,不会引起进程总是退出。
httpd.conf
,
新的子进程将有可能不能启动或者可能得到预期之外的结果。ThreadsPerChild
- 这是一条新的指令,用来告诉服务器应该使用多少个线程。
指明了服务器可以立刻处理的连接的最大数量;
如果你的站点有大量的点击,确认并为你的站点设置这条足够大的值。
缺省值是ThreadsPerChild
50
。
接收文件名作为参数的指令必须使用Windows文件名取代Unix文件名。 但是,因为Apache内部使用Unix风格的名字,你必须使用正斜杠而不是反斜杠。 可以使用盘符;如果省略,将假定使用Apache执行文件所在盘符。
Apache for Windows具有运行时装入模块的能力,不需要重新编译。
如果Apach是e在正常情况下编译,它会在\Apache\modules
目录下安装许多可选模块。
要激活它们或者其他模块,必须使用新的LoadModule
指令。
举例来说,要激活状态模块,使用下列指令(除了access.conf
中的状态激活指令以外):
LoadModule status_module modules/mod_status.so
也可使用创建可装载模块中的信息。
Apache也可以装载ISAPI扩展(i.e., Internet Server Applications),例如Microsoft IIS服务器和其他一些Windows服务器所使用的。 这里有更多相关信息。注意Apache不能装载ISAPI 过滤器。
当运行CGI脚本时,Apache查找脚本解释器使用的方法是由
ScriptInterpreterSource
指令配置的。
由于在Windows下管理具有像.htaccess
这样名字的文件经常是很困难的,
你会发现在配置文件中使用AccessFilename
指令改变使用的配置文件的名字是很有用。
-n
选项只在Apache 1.3.7 及以后的版本中可用。
早期版本只支持缺省服务名"Apache"。你可以像下面这样将Apache安装为Windows NT服务:
apache -i -n "服务名"
要安装一个使用特定配置的服务,安装时指定配置文件:
apache -i -n "服务名" -f "\my server\conf\my.conf"
要移除一个Apache服务,使用:
apache -u -n "服务名"
如果没有指定服务名,缺省地,将使用"Apache"。
一旦服务被安装,你可以使用-n
选项和其他选项一起访问该服务的配置文件。例如:
测试一个服务的配置文件:
apache -n "服务名" -t
启动一个使用某服务配置文件的控制台Apache:
apache -n "服务名"
对于Apache发行版1.3.13更早的版本,成功运行已安装服务所要求的依存关系并没有配置。 安装了一个早期版本Apache的服务以后, 你还必须做以下工作:
运行 regedt32
从菜单选择窗口 - "HKEY_LOCAL_MACHINE on Local Machine"
双击打开 SYSTEM, 然后打开 the CurrentControlSet
滚动到Apache服务名并点击
从菜单选择 Edit - Add Value...
用下列值填充Add Value对话框
数值名称: DependOnGroup
数据类型: REG_MULTI_SZ
点击确定
保留多字符串编辑器为空并点击确定
Select Edit - 从菜单选择 Edit - Add Value...
用下列值填充Add Value对话框
数值名称: DependOnService
数据类型: REG_MULTI_SZ
点击确定
在多字符串编辑器中输入下列列表(每行一条)
Tcpip
Afd
点击确定
如果你从第三方模块、ISAPI或者其他像ActiveState Perl那样的附加脚本技术使用了COM或者DCOM,你可能还需要在DependOnService列表中加入Rpcss条目。为了避免不必要地暴露TCP端口135,Apache安装时没有创建那个条目。如上述步骤在找到或是创建数值名称DependOnService,双击它并加入Rpcss条目到列表。
当Apache第一次被安装为服务(例如使用-i
选项),它会以用户"System"(本地系统账号)运行。
如果web服务器的所有资源都在本地系统上,这样做会问题比较少,但是将会具有很大的安全权限来影响本地机器!
永远不要把网络权限授予SYSTEM账号!创建一个新的用户帐号来代替它, 给这个用户授予合适的权限,并使用"Log On As:"选项。选择开始菜单 -> 设置 -> 控制面板 -> 服务 -> apache服务 ...并点击"启动服务"来访问该设置
SYSTEM账号没有网络权限,因此对于服务一个Apache的共享安装实例或者共享页都是不可见的。如果你打算使用任何网络资源,下面的步骤应该有所帮助:
文档
和脚本
目录的权力(最少需要读取和浏览访问)。日志
目录有读/写/删除访问权限!如果你允许使用这个帐号登录为一个用户,你就可以自己登录上去测试执行脚本、读取web页的权限,还可以用控制台窗口启动Apache。如果这样工作正常,你又执行了上述的操作,那么Apache就能够正常地作为服务运行了。
当启动Apache为服务的时候你可能会遇到一个来自Windows服务管理器的错误信息。 例如,如果你想使用控制面板中的服务小程序启动Apache,可能会得到下面这条信息:
Could not start the apache service on \\COMPUTER
Error 1067; The process terminated unexpectedly.
启动Apache时一出现问题你就会得到这个错误信息。为了弄清是什么引起了错误, 你应该遵循从命令行运行Running Apache for Windows中的建议。
还有,如果Apache作为服务运行,Apache 1.3.13 目前在Windows NT/2000下把启动错误记录在应用程序事件日志里。 运行事件察看器并选择应用程序日志检查相应纪录。
要了解从命令行控制Apache服务的细节,请参照控制台命令行部分。
可以以服务方式安装并运行Apache的多个实例。像下面这样启动、重启及关闭/停止Apache服务:
apache -n "服务名" -k start
apache -n "服务名" -k restart
apache -n "服务名" -k shutdown
apache -n "服务名" -k stop
对于缺省的"Apache"服务,选项-n
仍然需要,因为如果命令中使用-k
选项而没有-n
选项的话,命令会作用在运行于控制台窗口的Apache上。引号只是在服务名含有空格时才是必要的。
-k shutdown
的别名-k stop
只是到了1.3.13版本才被引入。
早期版本的Apache只认识-k shutdown
选项。先于1.3.3版本的Apache不认识任何-k
选项!此外,你可以使用NT本机命令NET
来启动和停止Apache服务,像这样:
NET START "服务名"
NET STOP "服务名"
同样,引号只是在服务名含有空格时才是必需的。
对于让Apache在Windows 95/98 下以类似Windows NT/2000服务的方式运行有一些支持。都是高度试验性的, 即使能够工作,Apache软件基金会将不会证实其可靠性和未来的支持。继续进行你自己的冒险吧!
一旦你确认Apache在命令行提示符下正确工作,你就可以像在Windows NT/2000版本下那样用同样的命令安装、控制和卸载Apache服务。
但是,其中有相当大的区别你需要注意:
如果你输入下列命令,Apache会尝试启动,如果成功他将在后台运行:
Apache -n "服务名" -k start
例如,通过桌面的快捷方式运行,如果服务启动成功一个控制台窗口会快速闪过并立刻消失。
如果启动时Apache检测到比如httpd.conf
文件中有不正确的设置这样的问题,则控制台窗口会保持可见。
这样将显示一个有助于追踪错误原因的错误信息。
Windows 95/98 不支持NET START
或者NET STOP
命令,因此你在命令中必须使用Apache的服务控制选项。
你可能希望为每个命令设置一个快捷方式以便你能够只需要从开始菜单或者桌面一点就能执行所需的操作。
Apache和Windows 95/98 没有提供让Apache服务以特定的具有网络权限的用户身份运行的支持。 实际上,Windows 95/98 在本地机器上根本没有提供安全性。这就是Apache软件基金会从不支持使用Windows 95/98 作为公用httpd服务器的原因。这个便利存在的唯一目的是协助用户开发web内容和学习Apache服务器,或者也许在一个安全的、私有的网络上充当intranet服务器。
启动Apache运行以后(不管是控制台窗口还是作为服务),
它会在80端口上进行监听(除非你改变了配置文件中的Listen
指令。
要连接到服务器访问默认页面,启动一个浏览器并输入下列URL:
http://localhost/
应该出现一个欢迎页面作为应答,并且页面上有到Apache用户手册的链接。
如果什么都没有发生或是得到了一个错误,检查logs
文件夹中的
error_log
文件。如果你的主机没有联网,你也许需要输入这样的URL:
http://127.0.0.1/
一旦你的基本配置可以工作了,你应该编辑conf
目录下的文件来恰当地配置Apache。
此外,如果你改变了作为NT服务运行的Apache的配置,
你应该首先尝试从命令行启动来保证能够无错地启动Apache服务。
因为Apache 不能 与其他TCP/IP应用程序共享同一个端口, 你可能需要先停止或者卸载某些特定的服务。这包括(但不限于) 别的web服务器和BlackIce那样的防火墙。如果你只能在禁止其他服务的情况下启动Apache, 那么需要重新配置Apache或者其他程序使它们不监听同一个TCP/IP端口。