Apache HTTP 服务器版本 2.4
本文档介绍如何在 Microsoft Windows 下安装、配置和运行 Apache 2.4。如果您在查看文档(以及任何事件和错误日志)后仍有疑问,您应该咨询由同行支持的 用户邮件列表。
本文档假设您正在安装 Apache 的二进制发行版。如果您想自己编译 Apache(可能是为了帮助开发或追踪错误),请参阅 为 Microsoft Windows 编译 Apache。
运行 Apache 2.4 的主要 Windows 平台是 Windows 2000 或更高版本。始终获取并安装最新的 Service Pack,以避免操作系统错误。
Apache HTTP 服务器项目本身不提供软件的二进制发行版,只提供源代码。个别提交者可能提供二进制包作为便利,但这并非发行版交付物。
如果您无法自己编译 Apache HTTP 服务器,您可以从互联网上提供的众多二进制发行版中获取二进制包。
在 Microsoft Windows 上部署 Apache httpd(以及可选的 PHP 和 MySQL)的流行选项包括
Apache 由 conf
子目录中的文件配置。这些与用于配置 Unix 版本的文件相同,但 Apache 在 Windows 上有一些不同的指令。有关所有可用指令,请参阅 指令索引。
源代码发行版的默认配置期望服务器安装到 \Apache24。这可以在编译时自定义,但重要的是,最终 httpd.conf
中的 ServerRoot
必须与实际的安装根目录匹配。二进制发行版可能会自定义默认安装根目录或初始配置的整体布局。
适用于 Windows 的 Apache 的主要区别在于
由于适用于 Windows 的 Apache 是多线程的,它不像 Apache 在 Unix 上那样为每个请求使用单独的进程。相反,通常只有两个 Apache 进程在运行:一个父进程和一个处理请求的子进程。在子进程中,每个请求都由一个单独的线程处理。
进程管理指令也不同
MaxConnectionsPerChild
:与 Unix 指令一样,这控制单个子进程在退出之前将服务多少个连接。但是,与 Unix 不同,替换进程不会立即可用。使用默认的 MaxConnectionsPerChild 0
,除非指示更改行为以克服第三方模块或进程内应用程序中的内存泄漏。
httpd.conf
,新的子进程可能无法启动,或者您可能会收到意外的结果。ThreadsPerChild
:此指令是新的。它告诉服务器应该使用多少个线程。这是服务器一次可以处理的最大连接数,因此请确保将此数字设置得足够高,以满足您的网站,如果您遇到大量访问量。推荐的默认值为 ThreadsPerChild 150
,但这必须根据预期接受的最大并发连接数进行调整。
接受文件名作为参数的指令必须使用 Windows 文件名而不是 Unix 文件名。但是,由于 Apache 可能会将反斜杠解释为“转义字符”序列,因此您应该始终在路径名中使用正斜杠,而不是反斜杠。
虽然文件名在 Windows 上通常不区分大小写,但 URL 在映射到文件系统之前仍被内部视为区分大小写。例如,<Location>
、Alias
和 ProxyPass
指令都使用区分大小写的参数。因此,在尝试限制对文件系统中内容的访问时,使用 <Directory>
指令尤其重要,因为此指令适用于目录中的任何内容,无论如何访问它。如果您希望确保 URL 中只使用小写字母,您可以使用类似以下内容
RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "%{REQUEST_URI}" "[A-Z]" RewriteRule "(.*)" "${lowercase:$1}" [R,L]
运行时,Apache 只需要对日志目录和任何配置的缓存目录树具有写入权限。由于不区分大小写和 8.3 格式短名称的问题,Apache 必须验证所有给定的路径名。这意味着 Apache 从驱动器根目录到目录叶节点评估的每个目录都必须具有读取、列出和遍历目录的权限。如果 Apache2.4 安装在 C:\Program Files 中,那么根目录、Program Files 和 Apache2.4 都必须对 Apache 可见。
适用于 Windows 的 Apache 包含在运行时加载模块的能力,无需重新编译服务器。如果 Apache 正常编译,它将在 \Apache2.4\modules
目录中安装许多可选模块。要激活这些模块或其他模块,必须使用 LoadModule
指令。例如,要激活状态模块,请使用以下内容(除了 access.conf
中的激活状态的指令):
LoadModule status_module "modules/mod_status.so"
有关 创建可加载模块 的信息也可供使用。
Apache 还可以加载 ISAPI(Internet Server Application Programming Interface)扩展,例如 Microsoft IIS 和其他 Windows 服务器使用的扩展。更多信息可供使用。请注意,Apache **无法**加载 ISAPI 过滤器,并且某些 Microsoft 功能扩展的 ISAPI 处理程序将无法正常工作。
运行 CGI 脚本时,Apache 用于查找脚本解释器的方法可以使用 ScriptInterpreterSource
指令配置。
由于在 Windows 中管理像 .htaccess
这样的名称的文件通常很困难,您可能会发现使用 AccessFilename
指令更改此每个目录配置文件的名称很有用。
Apache 启动期间的任何错误都会在 Windows NT 上运行时记录到 Windows 事件日志中。此机制充当那些 Apache 尚未准备好使用 error.log
文件的情况的备份。您可以使用事件查看器查看 Windows 应用程序事件日志,例如,开始 - 设置 - 控制面板 - 管理工具 - 事件查看器。
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.4
和 NET 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 访问网络资源,则需要这样做。
htdocs
和 cgi-bin
)的读取和执行 (RX) 权限。logs
目录的更改 (RWXD) 权限。httpd.exe
二进制可执行文件的读取和执行 (RX) 权限。logs
子目录除外,用户必须至少具有更改 (RWXD) 权限。如果您允许该帐户以用户和服务身份登录,那么您可以使用该帐户登录并测试该帐户是否具有执行脚本、读取网页以及在控制台窗口中启动 Apache 的权限。如果这有效,并且您已按照上述步骤操作,Apache 应该能够以服务身份运行,不会出现任何问题。
当以服务身份启动 Apache 时,您可能会遇到来自 Windows 服务控制管理器的错误消息。例如,如果您尝试使用 Windows 控制面板中的“服务”小程序启动 Apache,您可能会收到以下消息
无法在 \\COMPUTER 上启动 Apache2.4 服务
错误 1067;进程意外终止。
如果启动 Apache 服务时出现任何问题,您将收到此通用错误。为了查看真正导致问题的原因,您应该按照从命令提示符运行 Apache for Windows 的说明进行操作。
如果您在使用服务方面遇到问题,建议您按照以下说明尝试从控制台窗口启动 httpd.exe,并在努力再次以服务身份启动它之前解决错误。
将 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
如果服务器正在以服务身份运行。
kill -TERM pid
和 kill -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 时,了解它如何找到配置文件非常重要。您可以通过两种方式在命令行中指定配置文件
-f
指定特定配置文件的绝对或相对路径
httpd.exe -f "c:\my server files\anotherconfig.conf"
或者
httpd.exe -f files\anotherconfig.conf
-n
指定要使用其配置文件的已安装 Apache 服务
httpd.exe -n "MyServiceName"
在这两种情况下,都应在配置文件中设置正确的 ServerRoot
。
如果您没有使用 -f
或 -n
指定配置文件,Apache 将使用编译到服务器中的文件名,例如 conf\httpd.conf
。此内置路径相对于安装目录。您可以通过使用 -V
开关调用 Apache 时查看标记为 SERVER_CONFIG_FILE
的值来验证编译后的文件名,如下所示
httpd.exe -V
然后,Apache 将尝试通过以下方式确定其 ServerRoot
,按此顺序
-C
命令行开关的 ServerRoot
指令。-d
开关。 /apache
,您可以通过使用 httpd.exe -V
并查找标记为 HTTPD_ROOT
的值来验证它。如果您没有进行二进制安装,Apache 在某些情况下会抱怨缺少注册表项。如果服务器能够找到其配置文件,则可以忽略此警告。
此项的值是包含 conf
子目录的 ServerRoot
目录。当 Apache 启动时,它会从该目录读取 httpd.conf
文件。如果此文件包含一个 ServerRoot
指令,该指令包含与从上面的注册表项获得的目录不同的目录,Apache 将忘记注册表项并使用配置文件中的目录。如果您将 Apache 目录或配置文件复制到新位置,则必须更新 httpd.conf
文件中的 ServerRoot
指令以反映新位置。
启动 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 尝试绕过防火墙问题。
可以使用 Windows 提供的两种机制来指定对网络文件的访问
Alias "/images/" "Z:/"
Alias "/images/" "//imagehost/www/images/"
映射的驱动器号允许管理员在 Apache httpd 配置之外维护对特定机器和路径的映射。但是,这些映射仅与交互式会话相关联,当 Apache httpd 以服务身份启动时,它们无法直接被 Apache httpd 使用。仅在 httpd.conf 中使用 UNC 路径访问网络资源,以便无论 Apache httpd 如何启动,都可以一致地访问这些资源。(晦涩难懂且容易出错的过程可以解决映射驱动器号的限制,但不建议这样做。)
DocumentRoot "//dochost/www/html/"
DocumentRoot "//192.168.1.50/docs/"
Alias "/images/" "//imagehost/www/images/" <Directory "//imagehost/www/images/"> #... </Directory>
当以服务身份运行 Apache httpd 时,您必须创建一个单独的帐户才能访问网络资源,如上所述。
如果在操作系统实例上使用了数十个管道日志记录器,则通常需要扩展“桌面堆”。有关更详细的信息,请参阅 管道日志记录 文档。