<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 平台特定说明

在 Microsoft Windows 上使用 Apache HTTP 服务器

可用语言:  en  |  fr  |  ko 

本文档介绍如何在 Microsoft Windows 下安装、配置和运行 Apache 2.4。如果您在查看文档(以及任何事件和错误日志)后仍有疑问,您应该咨询由同行支持的 用户邮件列表

本文档假设您正在安装 Apache 的二进制发行版。如果您想自己编译 Apache(可能是为了帮助开发或追踪错误),请参阅 为 Microsoft Windows 编译 Apache

Support Apache!

另请参阅

top

操作系统要求

运行 Apache 2.4 的主要 Windows 平台是 Windows 2000 或更高版本。始终获取并安装最新的 Service Pack,以避免操作系统错误。

Apache HTTP 服务器版本 2.2 以后的版本将无法在 Windows 2000 之前的任何操作系统上运行。
top

下载适用于 Windows 的 Apache

Apache HTTP 服务器项目本身不提供软件的二进制发行版,只提供源代码。个别提交者可能提供二进制包作为便利,但这并非发行版交付物。

如果您无法自己编译 Apache HTTP 服务器,您可以从互联网上提供的众多二进制发行版中获取二进制包。

在 Microsoft Windows 上部署 Apache httpd(以及可选的 PHP 和 MySQL)的流行选项包括

top

自定义适用于 Windows 的 Apache

Apache 由 conf 子目录中的文件配置。这些与用于配置 Unix 版本的文件相同,但 Apache 在 Windows 上有一些不同的指令。有关所有可用指令,请参阅 指令索引

源代码发行版的默认配置期望服务器安装到 \Apache24。这可以在编译时自定义,但重要的是,最终 httpd.conf 中的 ServerRoot 必须与实际的安装根目录匹配。二进制发行版可能会自定义默认安装根目录或初始配置的整体布局。

适用于 Windows 的 Apache 的主要区别在于

top

以服务形式运行 Apache

Apache 附带一个名为 Apache Service Monitor 的实用程序。使用它,您可以查看和管理网络上任何计算机上所有已安装的 Apache 服务的状态。要能够使用监视器管理 Apache 服务,您必须先安装该服务(可以通过安装自动安装,也可以手动安装)。

您可以按照以下步骤从 Apache bin 子目录的命令提示符安装 Apache 作为 Windows NT 服务

httpd.exe -k install

如果您需要指定要安装的服务的名称,请使用以下命令。如果您在计算机上有多个不同的 Apache 服务安装,则必须执行此操作。如果您在安装过程中指定了名称,则在任何其他 -k 操作期间也必须指定它。

httpd.exe -k install -n "MyServiceName"

如果您需要为不同的服务使用特定命名的配置文件,则必须使用以下命令

httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf"

如果您使用第一个命令,除了 -k install 之外没有任何特殊参数,则服务将被称为 Apache2.4,并且配置将被假定为 conf\httpd.conf

删除 Apache 服务很容易。只需使用

httpd.exe -k uninstall

要卸载的特定 Apache 服务可以通过使用以下命令指定

httpd.exe -k uninstall -n "MyServiceName"

Apache 服务的正常启动、重新启动和关闭通常通过 Apache Service Monitor 完成,使用 NET START Apache2.4NET STOP Apache2.4 等命令,或者通过正常的 Windows 服务管理完成。在以任何方式启动 Apache 作为服务之前,您应该使用以下命令测试服务的配置文件

httpd.exe -n "MyServiceName" -t

您也可以通过命令行开关控制 Apache 服务。要启动已安装的 Apache 服务,您将使用以下命令

httpd.exe -k start -n "MyServiceName"

要通过命令行开关停止 Apache 服务,请使用以下命令

httpd.exe -k stop -n "MyServiceName"

或者

httpd.exe -k shutdown -n "MyServiceName"

您还可以重新启动正在运行的服务并强制它重新读取其配置文件,方法是使用以下命令

httpd.exe -k restart -n "MyServiceName"

默认情况下,所有 Apache 服务都注册为以系统用户(LocalSystem 帐户)身份运行。LocalSystem 帐户没有通过任何 Windows 安全机制(包括文件系统、命名管道、DCOM 或安全 RPC)访问网络的权限。但是,它在本地具有广泛的权限。

切勿授予 LocalSystem 帐户任何网络权限!如果您需要 Apache 能够访问网络资源,请为 Apache 创建一个单独的帐户,如下所示。

建议用户为运行 Apache 服务创建单独的帐户。如果您必须通过 Apache 访问网络资源,则需要这样做。

  1. 创建一个普通的域用户帐户,并确保记住其密码。
  2. 授予新创建的用户“以服务身份登录”和“作为操作系统的一部分运行”的权限。在 Windows NT 4.0 上,这些权限通过域用户管理器授予,但在 Windows 2000 和 XP 上,您可能希望使用组策略来传播这些设置。您也可以通过本地安全策略 MMC 管理单元手动设置这些权限。
  3. 确认创建的帐户是 Users 组的成员。
  4. 授予该帐户对所有文档和脚本文件夹(例如 htdocscgi-bin)的读取和执行 (RX) 权限。
  5. 授予该帐户对 Apache logs 目录的更改 (RWXD) 权限。
  6. 授予该帐户对 httpd.exe 二进制可执行文件的读取和执行 (RX) 权限。
通常,将 Apache 服务运行的用户的权限设置为对整个 Apache2.4 目录具有读写执行 (RX) 权限是一个好习惯,但 logs 子目录除外,用户必须至少具有更改 (RWXD) 权限。

如果您允许该帐户以用户和服务身份登录,那么您可以使用该帐户登录并测试该帐户是否具有执行脚本、读取网页以及在控制台窗口中启动 Apache 的权限。如果这有效,并且您已按照上述步骤操作,Apache 应该能够以服务身份运行,不会出现任何问题。

错误代码 2186 通常表明您需要检查服务的“以身份登录”配置,因为 Apache 无法访问所需的网络资源。此外,请密切注意配置为以其身份运行的 Apache 用户的权限。

当以服务身份启动 Apache 时,您可能会遇到来自 Windows 服务控制管理器的错误消息。例如,如果您尝试使用 Windows 控制面板中的“服务”小程序启动 Apache,您可能会收到以下消息

无法在 \\COMPUTER 上启动 Apache2.4 服务
错误 1067;进程意外终止。

如果启动 Apache 服务时出现任何问题,您将收到此通用错误。为了查看真正导致问题的原因,您应该按照从命令提示符运行 Apache for Windows 的说明进行操作。

如果您在使用服务方面遇到问题,建议您按照以下说明尝试从控制台窗口启动 httpd.exe,并在努力再次以服务身份启动它之前解决错误。

top

将 Apache 作为控制台应用程序运行

将 Apache 作为服务运行通常是推荐的使用方式,但在某些情况下,从命令行工作更容易,尤其是在初始配置和测试期间。

要从命令行以控制台应用程序身份运行 Apache,请使用以下命令

httpd.exe

Apache 将执行,并将一直运行,直到通过按下 Control-C 停止它。

您还可以通过安装期间放置在 开始菜单 --> 程序 --> Apache HTTP Server 2.4.xx --> 控制 Apache 服务器 中的快捷方式“在控制台中启动 Apache”来运行 Apache。这将打开一个控制台窗口并在其中启动 Apache。如果您没有将 Apache 安装为服务,则该窗口将一直可见,直到您通过按下运行 Apache 的控制台窗口中的 Control-C 停止 Apache。服务器将在几秒钟内退出。但是,如果您确实将 Apache 安装为服务,则该快捷方式将启动该服务。如果 Apache 服务已在运行,则该快捷方式不会执行任何操作。

如果 Apache 正在以服务身份运行,您可以通过打开另一个控制台窗口并输入以下内容来告诉它停止

httpd.exe -k shutdown

以服务身份运行应优先于在控制台窗口中运行,因为这使 Apache 能够结束任何当前操作并优雅地清理。

但是,如果服务器正在控制台窗口中运行,您只能通过按下同一窗口中的 Control-C 来停止它。

您还可以告诉 Apache 重新启动。这将强制它重新读取配置文件。任何正在进行的操作都将允许完成,不会中断。要重新启动 Apache,请在用于启动 Apache 的控制台窗口中按下 Control-Break,或输入

httpd.exe -k restart

如果服务器正在以服务身份运行。

注意:对于熟悉 Unix 版本的 Apache 的用户:这些命令提供了 Windows 等效于 kill -TERM pidkill -USR1 pid 的命令。使用的命令行选项 -k 是为了提醒您在 Unix 上使用的 kill 命令。

如果 Apache 控制台窗口在启动后立即或意外关闭,请从“开始”菜单 --> “程序”中打开“命令提示符”。更改到您安装 Apache 的文件夹,键入命令 httpd.exe,并阅读错误消息。然后更改到日志文件夹,并查看 error.log 文件以查找配置错误。假设 httpd 安装在 C:\Program Files\Apache Software Foundation\Apache2.4\ 中,您可以执行以下操作

c
cd "\Program Files\Apache Software Foundation\Apache2.4\bin"
httpd.exe

然后等待 Apache 停止,或按下 Control-C。然后输入以下内容

cd ..\logs
more < error.log

在使用 Apache 时,了解它如何找到配置文件非常重要。您可以通过两种方式在命令行中指定配置文件

在这两种情况下,都应在配置文件中设置正确的 ServerRoot

如果您没有使用 -f-n 指定配置文件,Apache 将使用编译到服务器中的文件名,例如 conf\httpd.conf。此内置路径相对于安装目录。您可以通过使用 -V 开关调用 Apache 时查看标记为 SERVER_CONFIG_FILE 的值来验证编译后的文件名,如下所示

httpd.exe -V

然后,Apache 将尝试通过以下方式确定其 ServerRoot,按此顺序

  1. 通过 -C 命令行开关的 ServerRoot 指令。
  2. 命令行上的 -d 开关。
  3. 当前工作目录。
  4. 如果您进行了二进制安装,则会创建一个注册表项。
  5. 编译到服务器中的服务器根目录。默认情况下为 /apache,您可以通过使用 httpd.exe -V 并查找标记为 HTTPD_ROOT 的值来验证它。

如果您没有进行二进制安装,Apache 在某些情况下会抱怨缺少注册表项。如果服务器能够找到其配置文件,则可以忽略此警告。

此项的值是包含 conf 子目录的 ServerRoot 目录。当 Apache 启动时,它会从该目录读取 httpd.conf 文件。如果此文件包含一个 ServerRoot 指令,该指令包含与从上面的注册表项获得的目录不同的目录,Apache 将忘记注册表项并使用配置文件中的目录。如果您将 Apache 目录或配置文件复制到新位置,则必须更新 httpd.conf 文件中的 ServerRoot 指令以反映新位置。

top

测试安装

启动 Apache 后(在控制台窗口中或作为服务),它将在端口 80 上监听(除非您更改了配置文件中的 Listen 指令或仅为当前用户安装了 Apache)。要连接到服务器并访问默认页面,请启动浏览器并输入以下 URL

http://localhost/

Apache 应该会显示一个欢迎页面,您应该会看到“它有效!”。如果没有任何反应或出现错误,请查看 logs 子目录中的 error.log 文件。如果您的主机未连接到网络,或者您的 DNS(域名服务)配置存在严重问题,您可能需要使用以下 URL

http://127.0.0.1/

如果您碰巧在备用端口上运行 Apache,则需要在 URL 中明确指定该端口

http://127.0.0.1:8080/

基本安装完成后,您应该通过编辑 conf 子目录中的文件来正确配置它。同样,如果您更改了 Apache 的 Windows NT 服务配置,请首先尝试从命令行启动它,以确保服务能够启动,不会出现任何错误。

由于 Apache **无法**与另一个 TCP/IP 应用程序共享同一个端口,因此您可能需要在运行 Apache 之前停止、卸载或重新配置某些其他服务。这些冲突的服务包括其他 WWW 服务器、某些防火墙实现,甚至某些客户端应用程序(例如 Skype),它们将使用端口 80 尝试绕过防火墙问题。

top

配置对网络资源的访问

可以使用 Windows 提供的两种机制来指定对网络文件的访问

映射的驱动器号
例如,Alias "/images/" "Z:/"
UNC 路径
例如,Alias "/images/" "//imagehost/www/images/"

映射的驱动器号允许管理员在 Apache httpd 配置之外维护对特定机器和路径的映射。但是,这些映射仅与交互式会话相关联,当 Apache httpd 以服务身份启动时,它们无法直接被 Apache httpd 使用。仅在 httpd.conf 中使用 UNC 路径访问网络资源,以便无论 Apache httpd 如何启动,都可以一致地访问这些资源。(晦涩难懂且容易出错的过程可以解决映射驱动器号的限制,但不建议这样做。)

带有 UNC 路径的示例 DocumentRoot

DocumentRoot "//dochost/www/html/"

带有 UNC 路径中 IP 地址的示例 DocumentRoot

DocumentRoot "//192.168.1.50/docs/"

带有 UNC 路径的示例 Alias 和相应的 Directory

Alias "/images/" "//imagehost/www/images/"

<Directory "//imagehost/www/images/">
#...
</Directory>

当以服务身份运行 Apache httpd 时,您必须创建一个单独的帐户才能访问网络资源,如上所述。

top

Windows 调整

可用语言:  en  |  fr  |  ko 

top

评论

注意
这不是问答部分。此处放置的评论应针对改进文档或服务器的建议,如果它们已被实施或被认为无效/偏离主题,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题,应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表