在 Microsoft Windows 上使用 Apache HTTP Server

本文档说明了如何在 Microsoft Windows 下安装,配置和运行 Apache 2.4. 如果在查看文档(以及所有事件和错误日志)后仍有疑问,则应查阅同行支持的用户的邮件列表

本文档假定您正在安装 Apache 的二进制发行版。如果要自己编译 Apache(可能有助于开发或跟踪错误),请参见为 Microsoft Windows 编译 Apache

os 要求

运行 Apache 2.4 的主要 Windows 平台是 Windows 2000 或更高版本。始终获取并安装当前的 Service Pack 以避免 os 错误。

Note

低于 2.2 的 Apache HTTP Server 版本将无法在 Windows 2000 之前的任何 os 上运行。

下载适用于 Windows 的 Apache

Apache HTTP Server Project 本身不提供二进制版本的软件,仅提供源代码。各个提交者可能提供二进制软件包是为了方便,但它不是可交付的版本。

如果您不能自己编译 Apache HTTP Server,则可以从 Internet 上可用的大量二进制发行版中获取二进制软件包。

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

自定义 Windows 版 Apache

Apache 由conf子目录中的文件配置。这些是用于配置 Unix 版本的文件,但是在 Windows 上有一些针对 Apache 的不同指令。有关所有可用指令,请参见directive index

Windows 版 Apache 中的主要区别是:

流程 Management 指令也不同:

MaxConnectionsPerChild:与 Unix 指令一样,它控制单个子进程在退出前将服务多少个连接。但是,与 Unix 不同,替换过程不是立即可用的。使用默认的MaxConnectionsPerChild 0,除非指示更改行为以克服第三方模块或进程内应用程序中的内存泄漏。

Warning

警告:启动新的子进程时,将重新读取服务器配置文件.如果您修改了httpd.conf,则新孩子可能无法启动,或者您可能会收到意外的结果.

ThreadsPerChild:此伪指令是新的。它告诉服务器应该使用多少个线程。这是服务器一次可以处理的最大连接数,因此,如果点击率很高,请确保为您的站点设置足够高的连接数。推荐的默认值是ThreadsPerChild 150,但是必须对其进行调整以反映可以接受的同时连接的最大预期数量。

RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond "%{REQUEST_URI}" "[A-Z]"
RewriteRule "(.*)" "${lowercase:$1}" [R,L]
LoadModule status_module "modules/mod_status.so"

也提供有关创建可加载模块的信息。

将 Apache 即服务运行

Apache 带有一个称为 Apache Service Monitor 的 Util。使用它,您可以查看和 Management 网络上任何计算机上所有已安装的 Apache 服务的状态。为了能够使用监视器 Management 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 Service Monitor,使用诸如NET START Apache2.4NET STOP Apache2.4之类的命令或通过常规 Windows 服务 Management 来正常启动,重新启动和关闭 Apache 服务。在通过任何方式将 Apache 作为服务启动之前,您应该使用以下方法测试服务的配置文件:

httpd.exe -n "MyServiceName" -t

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

httpd.exe -k start -n "MyServiceName"

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

httpd.exe -k stop -n "MyServiceName"

or

httpd.exe -k shutdown -n "MyServiceName"

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

httpd.exe -k restart -n "MyServiceName"

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

Warning

绝对不要授予LocalSystem帐户任何网络特权!如果您需要 Apache 能够访问网络资源,请按照以下说明为 Apache 创建一个单独的帐户.

建议用户创建一个单独的帐户来运行 Apache 服务。如果必须通过 Apache 访问网络资源,则这是必需的。

Note

通常,向用户授予 Apache 服务以对整个 Apache2.4 目录的读取和执行(RX)访问权限运行,但logs子目录除外,在该目录中,用户必须至少具有更改(RWXD)权限。

如果您允许该帐户以用户和服务身份登录,则可以使用该帐户登录并测试该帐户是否具有执行脚本,阅读网页的权限,以及您可以通过以下方式启动 Apache:控制台窗口。如果这可行,并且您已按照上述步骤进行操作,则 Apache 应该作为服务执行,不会出现问题。

Error code 2186

很好地表明您需要查看该服务的“登录身份”配置,因为 Apache 无法访问所需的网络资源。另外,请密切注意将 Apache 配置为以其身份运行的用户的特权。

将 Apache 作为服务启动时,您可能会遇到 Windows 服务控制 Management 器的错误消息。例如,如果尝试使用 Windows 控制面板中的服务 Servlets 启动 Apache,则可能会收到以下消息:

Could not start the Apache2.4 service on \\COMPUTER Error 1067; The process terminated unexpectedly.

如果启动 Apache 服务有任何问题,您将收到此一般错误。为了查看 true 引起问题的原因,您应该按照命令提示符中的说明运行 Windows 版 Apache。

如果您在使用该服务时遇到问题,建议您按照以下说明尝试从控制台窗口启动 httpd.exe,并解决错误,然后再尝试将其作为服务重新启动。

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

通常建议将 Apache 作为服务运行,以使用它,但有时从命令行进行操作更容易,尤其是在初始配置和测试期间。

要将命令行作为控制台应用程序运行 Apache,请使用以下命令:

httpd.exe

Apache 将执行,并且将一直运行,直到按 Control-C 将其停止为止。

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

如果 Apache 作为服务运行,则可以通过打开另一个控制台窗口并 Importing 以下命令来使其停止运行:

httpd.exe -k shutdown

与在控制台窗口中运行相比,应优先选择作为服务运行,因为这可以使 Apache 结束所有当前操作并优雅地进行清理。

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

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

httpd.exe -k restart

服务器是否作为服务运行。

Note

对于熟悉 Apache 的 Unix 版本的人们请注意:这些命令提供的 Windows 等效于kill -TERM pidkill -USR1 pid。选择使用的命令行选项-k来提醒在 Unix 上使用的kill命令。

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

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

然后 await Apache 停止,或按 Control-C。然后 Importing 以下内容:

cd ..\logs more < error.log

使用 Apache 时,重要的是要知道它将如何找到配置文件。您可以通过两种方式在命令行上指定配置文件:

httpd.exe -f "c:\my server files\anotherconfig.conf"

or

httpd.exe -f files\anotherconfig.conf

httpd.exe -n "MyServiceName"

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

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

httpd.exe -V

然后,Apache 将尝试按以下 Sequences 尝试确定其ServerRoot

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

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

测试安装

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

http://localhost/

Apache 应该在欢迎页面上做出响应,并且您应该看到“ It Works!”。如果没有任何反应或出现错误,请查看logs子目录中的error.log文件。如果您的主机未连接到网络,或者您的 DNS(域名服务)配置存在严重问题,则可能必须使用以下 URL:

http://127.0.0.1/

如果您恰巧在备用端口上运行 Apache,则需要将其明确地放在 URL 中:

http://127.0.0.1:8080/

基本安装成功后,应通过编辑conf子目录中的文件来正确配置它。同样,如果更改 Windows NT 服务的 Apache 配置,请首先尝试从命令行启动它,以确保该服务启动没有错误。

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

配置对网络资源的访问

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

Map 的驱动器号使 Management 员可以维护到 Apache httpd 配置之外的特定计算机和路径的 Map。但是,这些 Map 仅与交互式会话相关联,当 Apache httpd 作为服务启动时不能直接用于 Apache httpd。 **仅对 httpd.conf 中的网络资源使用 UNC 路径,以便无论 Apache httpd 如何启动都可以一致地访问资源。 (奥秘和容易出错的过程可能会解决对 Map 驱动器号的限制,但是不建议这样做.)

具有 UNC 路径的示例 DocumentRoot

DocumentRoot "//dochost/www/html/"

IP 地址位于 UNC 路径中的示例 DocumentRoot

DocumentRoot "//192.168.1.50/docs/"

示例别名和具有 UNC 路径的相应目录

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

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

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

Windows Tuning

首页