本文档说明了如何在Microsoft Windows下安装,配置和运行Apache 2.4。如果在查看文档(以及所有事件和错误日志)后仍有疑问,则应查阅同行支持的 用户的邮件列表。
本文档假定您正在安装Apache的二进制发行版。如果要自己编译Apache(可能有助于开发或跟踪错误),请参阅编译适用于Microsoft Windows的Apache。
运行Apache 2.4的主要Windows平台是Windows 2000或更高版本。始终获取并安装当前的Service Pack以避免操作系统错误。
Apache HTTP Server Project本身不提供二进制版本的软件,仅提供源代码。单个提交者可以提供二进制软件包来方便,但它不是可交付的版本。
如果您不能自己编译Apache HTTP Server,则可以从Internet上的大量二进制发行版中获取二进制软件包。
在Microsoft Windows上部署Apache httpd以及(可选)PHP和MySQL的流行选项包括:
Apache由conf
子目录中的文件配置。这些是用于配置Unix版本的相同文件,但是Windows上有一些针对Apache的不同指令。有关
所有可用指令,请参见指令索引。
Windows版Apache中的主要区别是:
因为Apache for Windows是多线程的,所以它不像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都是可见的。
Apache for Windows包含在运行时加载模块的功能,而无需重新编译服务器。如果Apache正常编译,它将在\Apache2.4\modules
目录中安装许多可选模块
。要激活这些或其他模块,LoadModule
必须使用指令。例如,要激活状态模块,请使用以下命令(除了中的status-activating指令之外access.conf
):
LoadModule status_module "modules/mod_status.so"
还提供了有关创建可加载模块的信息。
Apache还可以加载ISAPI(Internet服务器应用程序编程接口)扩展,例如Microsoft IIS和其他Windows服务器使用的扩展。提供更多信息。请注意,Apache 无法 加载ISAPI筛选器,并且具有某些Microsoft功能扩展的ISAPI处理程序将不起作用。
运行CGI脚本时,可使用ScriptInterpreterSource
指令配置Apache用于查找脚本解释器的方法
。
由于通常很难像.htaccess
Windows 那样管理具有名称的文件,因此您可能会发现使用AccessFilename
伪指令更改此按目录配置文件的名称很有用。
在Windows NT上运行时,Apache启动期间的任何错误都将记录到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访问网络资源,则这是必需的。
Log on
as a service
和的特权Act as part of the operating
system
。在Windows NT 4.0上,这些特权是通过域用户管理器授予的,但是在Windows 2000和XP上,您可能希望使用组策略来传播这些设置。您还可以通过“本地安全策略” MMC管理单元手动设置它们。
htdocs
和cgi-bin
举例)。logs
目录的帐户更改(RWXD)权限。httpd.exe
二进制可执行文件的读取和执行(RX)权限
。logs
子目录除外,在该子目录中,用户必须至少具有更改(RWXD)权限。如果允许该帐户以用户和服务身份登录,则可以使用该帐户登录并测试该帐户是否具有执行脚本,阅读网页的权限,以及您可以使用控制台窗口。如果这行得通,并且您已执行上述步骤,则Apache应该作为服务执行,没有问题。
将Apache作为服务启动时,您可能会遇到Windows服务控制管理器的错误消息。例如,如果尝试使用Windows控制面板中的服务小程序来启动Apache,则可能会收到以下消息:
Could not start the Apache2.4 service on \\COMPUTER
Error 1067; The process terminated unexpectedly.
如果启动Apache服务有任何问题,您将收到此一般错误。为了查看真正引起问题的原因,您应该按照命令提示符中的说明运行Windows版Apache。
如果您在使用该服务时遇到问题,建议您按照以下说明尝试从控制台窗口启动httpd.exe,并解决错误,然后再尝试将其作为服务重新启动。
通常建议将Apache作为服务运行,以使用它,但是有时从命令行进行操作会更容易,尤其是在初始配置和测试期间。
要将命令行作为控制台应用程序运行Apache,请使用以下命令:
httpd.exe
Apache将执行,并且将一直运行,直到通过按Control-C将其停止为止。
您也可以通过Start Menu --> Programs --> Apache HTTP Server
2.4.xx --> Control Apache Server
在安装过程中放置在控制台中的“在控制台中启动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
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
。此内置路径是相对于安装目录的。您可以从标记为的值(SERVER_CONFIG_FILE
使用-V
开关调用Apache时)验证编译的文件名,如下所示:
httpd.exe -V
然后,Apache将ServerRoot
尝试按以下顺序尝试确定其顺序:
ServerRoot
经由该指令-C
命令行开关。-d
命令行上开关。
/apache
默认情况下,这是您可以通过使用
httpd.exe -V
并查找标记为的值
来进行验证的方法HTTPD_ROOT
。如果您未进行二进制安装,则Apache在某些情况下会抱怨缺少注册表项。如果服务器原本可以找到其配置文件,则可以忽略此警告。
此项的值是
ServerRoot
包含conf
子目录的目录。Apache启动时,它将httpd.conf
从该目录读取文件。如果该文件包含的ServerRoot
指令所包含的目录与从上面的注册表项获得的目录不同,则Apache将忘记该注册表项并使用配置文件中的目录。如果将Apache目录或配置文件复制到新位置,则必须更新文件中的ServerRoot
指令
httpd.conf
以反映新位置,这一点至关重要
。
启动Apache之后(无论是在控制台窗口中还是作为服务),它将在端口80上侦听(除非您Listen
在配置文件中更改了
指令或仅为当前用户安装了Apache)。要连接到服务器并访问默认页面,请启动浏览器并输入以下URL:
http://localhost/
Apache应该在欢迎页面上做出响应,您应该看到“ It Works!”。如果没有任何反应或出现错误,请在子目录中查找
error.log
文件logs
。如果您的主机未连接到网络,或者您的DNS(域名服务)配置存在严重问题,则可能必须使用以下URL:
http://127.0.0.1/
如果您恰巧在备用端口上运行Apache,则需要将其显式放置在URL中:
http://127.0.0.1:8080/
基本安装成功后,应通过编辑conf
子目录中的文件来正确配置它。同样,如果更改Windows NT服务的Apache配置,请首先尝试从命令行启动它,以确保该服务启动没有错误。
由于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作为服务运行时,必须创建一个单独的帐户才能访问网络资源。