目录
前言
如何在 Windows 安装 Apache 2.4并配置为本地服务?本文给出了示例,并作了详细的记录。
【系统环境】
Win10 64bit
1 如何查看电脑是否配置了 Apache?
如下方法适用 Windows:
- Win + R
- 在运行窗口输入 services.msc
- 如下图可看到尚未安装 Apache
不过,我现在了解到只有把 Apache 配置为本地服务才能在这里看到。所以,这个方法不准确。如何把 Apache 配置为本地服务?
更加详细的步骤可参考Apache 下载+安装。
2 Apache 2.2及2.4两个版本之间的选择
-
Apache 官网从2.2之后,不再提供 Windows 的 .msi 或 .exe 安装版本,现在 Apache HTTP Server 有两个分支2.2及2.4。两者区别的文档。但是从2.2是可以直接升到2.4的。
-
Apache HTTP Server versions later than 2.2 will not run on any operating system earlier than Windows 2000. 高于 2.2 的 HTTP 服务器版本将无法在 Windows 2000 之前的任何操作系统上运行。
-
下载地址
术语解释:
3.1. PGP/MD5/SHA1都是加密算法,为文件进行一致性校验,确保文件没有被注入病毒和广告等。
3.2. .bz2 和.gz 都是 Linux 下文件压缩的格式,区别在于前者比后者压缩率更高,后者比前者花费更少的时间。
其他说明:
3.3. Apache 本身不提供已编译的安装包,只提供源码,如果你自己无法编译,可以选择下面这些官方推荐的第三方提供编译的网站。
3.4. 其中后两个是有名的 wamp 以及 xampp 集成环境。如果只想下载 Apache 可以选择前三个网站。 -
这里选择第一个 ApacheHaus,按需要的 x86或 x64进行下载。
-
Visual C++版本别称:Visual Studio 2012 (VC11), Visual Studio 2013 (VC12), Visual Studio 2015 (VC14), Visual Studio 2017 (VC15), Visual Studio 2019 (VS16) or Visual Studio 2022 (VS17)
3 OpenSSL 1.1.1和3.0.x 之间的版本选择
- Apache 2.4提供了 OpenSSL 1.1.1版本和3.0.x 版本。
- 1.1.1系列是长期支持(LTS)版本,支持到2023年9月11日。所有旧版本(包括1.1.0、1.0.2、1.0.0和0.9.8)现在都不支持,不应该使用。
- 最新的稳定版本是3.0系列。弃用所有低级别 API。
- 如果应用程序以前使用 OpenSSL 1.1.1,那么大多数应用程序将使用 OpenSSL 3.0 保持不变。但是,这不能保证,在某些情况下可能需要进行一些更改。
- OpenSSL 3.0 引入了许多新概念,如多线程应用,算法获取,编码和解码秘钥等。
- 与 OpenSSL 1.1相比,OpenSSL 3.0具有更大的可扩展性,各种代码清理和废弃,以及架构上的改进。
4 Apache 2.4.54 x64安装
- 有博主说,如果之前有安装2.2的版本,请先卸载,才能安装2.4版本。但我也看到有博主同时安装了2.2和2.4两个版本。
- 由于 Apache 官网从2.2之后,不再提供 Windows 的 .msi 或 .exe 安装版本,所以安装过程有些注意事项。
- 解压至目标文件夹:
C:/Apache24
,不要使用套两层的文件夹:C:/Apache24/Apache24。这里避免使用中文。另外,若解压到其他文件夹,还需要重新配置:修改 /conf/httpd.conf 里的 Define SRVROOT & ServerName,以及其他多处都需要修改。我这里没有修改,用了 默认的C:/Apache24
。
至此,安装完毕,那么是否可用?需要测试。
5 安装测试
-
总体思路:打开 CMD, cd 转到
\Apache24\bin
文件夹,键入httpd.exe
看一下反应 -
先解决 Windows 安全中心警报
-
检查一下443默认端口的使用情况,并找一个可用端口
不过,这只能说明正在运行的所有端口里不包含4430,并不意味着4430没有被占用。 -
这里有若干种处理方式。有的认为为占用443端口的进程重设端口,有的认为为 Apache24 默认使用443端口的安全操作重设端口。我采取了后者:
以 Win + X 调用 Windows PowerShell(管理员),再调用 notepad 打开httpd-ahssl.conf
,并替换443这个端口即可。我用前面找的4430端口。
还有,错误的做法在这里。 -
再次运行
httpd.exe
-
查看任务管理器如下:
-
在浏览器查看 Apache Haus’s test page 如下:
实际上,也就是file:///C:/Apache24/htdocs/index.html
这里略作说明:
7.1. 启动 Apache(在控制台窗口中或作为服务)后,它将侦听端口 80(除非您更改了配置文件中的 Listen 指令或仅为当前用户安装了 Apache)。要连接到服务器并访问默认页面,请启动浏览器并输入以下 URL:http://localhost/
7.2. 如果主机未连接到网络,或者 DNS(域名服务)配置遇到严重问题,则可能必须使用此 URL:http://127.0.0.1/
7.3. 如果您碰巧在备用端口上运行 Apache,则需要将其显式放在URL中:http://127.0.0.1:8080/
7.4. 基本安装工作完成后,应通过编辑 conf 子目录中的文件来正确配置它。同样,如果更改适用于 Apache 的 Windows NT 服务的配置,请首先尝试从命令行启动它,以确保该服务在启动时没有错误。
7.5. 由于 Apache 无法与其他 TCP/IP 应用程序共享同一端口,因此您可能需要在运行 Apache 之前停止、卸载或重新配置某些其他服务。这些冲突服务包括其他 WWW 服务器、某些防火墙实现,甚至一些客户端应用程序(如 Skype),这些应用程序将使用端口 80 来尝试绕过防火墙问题。 -
关闭:You can shut down Apache by pressing Ctrl+C (It may take a few seconds). 在 CMD 页面操作。
-
实际上,如上操作即 Running Apache as a Console Application,将 Apache 作为控制台应用程序运行:将 Apache 作为服务运行通常是推荐的使用方式,但有时从命令行工作更容易,尤其是在初始配置和测试期间。
9.1. 对开始菜单里操作的说明:Start Menu --> Programs --> Apache HTTP Server 2.4.xx --> Control Apache Server 有三种情况,其一,如没有将 Apache 安装为服务,则窗口将保持可见,直到按 Control-C 停止为止,其二,如确实将 Apache 安装为服务,则启动服务,其三,如 Apache 服务已经运行,那么快捷方式不会做任何事情。
9.2. 也可以让 Apache 重新启动。这将强制它重新读取配置文件。允许任何正在进行的操作不间断地完成。要重新启动 Apache,请执行httpd.exe -k restart
。
9.3. 对于熟悉 Apache 的 Unix 版本的人来说,请注意:这些命令提供了一个相当于 kill-TERM pid 和 kill-USR1 pid 的 Windows。使用的命令行选项 -k 被作为 Unix 上使用的 kill 命令的提醒。
9.4. 如果 Apache 控制台窗口在启动后立即或意外关闭,请从“开始”菜单 -->程序“中打开命令提示符。切换到安装 Apache 的文件夹,键入命令 httpd.exe,然后读取错误消息。然后转到 logs 文件夹,并查看 error.log 文件中是否存在配置错误。假设 httpd 已安装到 C:\Program Files\Apache Software Foundation\Apache2.4\ 中,您可以执行以下操作:
然后等待 Apache 停止,或按 Ctrl + C。然后输入以下内容:
9.5. 使用 Apache 时,了解它将如何找到配置文件非常重要。您可以通过两种方式在命令行上指定配置文件:
在这两种情况下,都应在配置文件中设置正确的服务器根 ServerRoot。
9.6. 如果未使用 -f 或 -n 指定配置文件,则 Apache 将使用编译到服务器中的文件名,例如 confhttpd.conf。此内置路径相对于安装目录。在使用 -V 开关调用 Apache 时,您可以从标记为 SERVER_CONFIG_FILE 的值验证编译的文件名,如下所示:httpd.exe -V
9.7. 然后,Apache 将通过尝试以下操作来确定其服务器根,按以下顺序:
9.8. 如果您没有执行二进制安装,Apache 在某些情况下会抱怨缺少注册表项。如果服务器以其他方式能够找到其配置文件,则可以忽略此警告。
9.9. 关键在于包含 conf 子目录的 ServerRoot 目录。当 Apache 启动时,它从该目录读取 httpd.conf 文件。如果该文件包含一个 ServerRoot 指令,该指令所包含的目录与从上述注册表项获得的目录不同,Apache 将忘记注册表项,而使用配置文件中的目录。如果您将 Apache 目录或配置文件复制到一个新的位置,那么更新 httpd.conf 文件中的 ServerRoot 指令以反映新的位置是非常重要的。
9.10. 作为服务运行应该优先于在控制台窗口中运行,因为这可以让 Apache 结束任何当前操作并优雅地清理。 但是,如果服务器在控制台窗口中运行,则只能通过在同一窗口中按 Control-C 来停止它。
6 配置为服务
查看解压缩后的文件如下:
从 readme_first.html 摘抄如下操作:
-
按如上命令行提示
httpd -k install
操作,但需要管理员权限,也需要在 bin 子目录下:
1.1. 如果需要指定要安装的服务的名称,请使用以下命令httpd.exe -k install -n "MyServiceName"
。如果您的计算机上有多个不同的 Apache 服务安装,则必须执行此操作。如果在安装过程中指定名称,则还必须在任何其他 -k 操作期间指定该名称。
1.2. 如果需要为不同的服务指定专门命名的配置文件,则必须使用以下内容httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf"
1.3. 如果第一个命令除了-k install之外没有任何特殊参数,该服务将被称为 Apache 2.4,配置将被假定为 conf\httpd.conf。 -
使用管理员权限,继续安装如下:
上图中最后一句话的意思是:当配置文件有错误时,Apache 是不能启动的,必须修改,直到没有错误提示为止。 -
自动弹出 Apache Monitor 界面
当然,也可以使用 readme_first.html 里提示的命令行在 CMD 里操作。比如,可以用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 之前,应使用httpd.exe -n "MyServiceName" -t
测试服务的配置文件。 -
重复 1 里的操作,再次查看本地服务如下:
如下内容译自Using Apache HTTP Server on Microsoft Windows:
默认情况下,所有 Apache 服务都注册为系统用户 (Local System Account) 运行。Local System Account 无权通过任何 Windows 安全机制访问您的网络,包括文件系统、命名管道、DCOM 或安全 RPC。然而,它在本地享有广泛的特权。
切勿向本地系统帐户授予任何网络权限!如果您需要 Apache 能够访问网络资源,请为 Apache 创建一个单独的帐户,如下所述。建议用户创建一个单独的帐户来运行 Apache 服务。如果您必须通过 Apache 访问网络资源,这是必需的。
4.1. 创建一个普通的域用户帐户,并确保记住其密码。
4.2. 向新创建的用户授予“作为服务登录”和“作为操作系统的一部分操作”的特权。在Windows NT 4.0上,这些权限是通过域的用户管理器授予的,但在 Windows 2000和 XP上,您可能希望使用组策略来传播这些设置。您还可以通过本地安全策略 MMC 管理单元手动设置这些参数。
4.3. 确认创建的帐户是 Users 组的成员。
4.4. 授予帐户对所有文档和脚本文件夹 (例如 htdocs 和 cgi-bin) 的读取和执行 (RX) 权限。
4.5. 向 Apache 日志目录授予帐户更改 (RWXD) 权限。
4.6. 授予帐户对 httpd.exe 二进制可执行文件的读取和执行 (RX) 权限。
4.6.1. 通常,向用户授予 Apache 服务作为读取和执行 (RX) 方式运行对整个 Apache2.4 目录的访问权限是一种很好的做法,但日志子目录除外,在该子目录中,用户必须至少具有更改 (RWXD) 权限。
4.6.2. 如果您允许该帐户以用户和服务身份登录,则可以使用该帐户登录,并测试该帐户是否具有执行脚本、读取网页以及您是否可以在控制台窗口中启动 Apache 的权限。如果这有效,并且您已经按照上述步骤操作,Apache 应该作为服务执行而不会出现问题。
4.6.3. Error Code 2186 很好地表明您需要查看服务的“登录身份”配置,因为 Apache 无法访问所需的网络资源。另外,请密切注意 Apache 配置为运行为的用户的权限。
4.6.4. 将 Apache 作为服务启动时,您可能会遇到来自 Windows 服务控制管理器的错误消息。例如,如果您尝试使用 Windows 控制面板中的“服务”小程序启动 Apache,则可能会收到以下消息:
4.6.5. 如果启动 Apache 服务时出现任何问题,您将收到此一般错误。为了查看真正导致问题的原因,您应该从命令提示符中按照运行 Windows 的 Apache 的说明进行操作。
4.6.6.如果您在使用服务时遇到问题,建议您按照以下说明尝试从控制台窗口启动 httpd.exe,并在努力将其作为服务再次启动之前解决错误。 -
卸载 Apache Service:稳妥起见,不要直接删除文件夹了事,先执行如下两个命令
httpd -k stop
和httpd -k uninstall
。当然,也有使用 sc command 的。不过,我还没有尝试。
5.1. 可用httpd.exe -k uninstall -n "MyServiceName"
指定卸载的特定 Apache 服务。
7 配置对网络资源的访问
如下内容译自 Using Apache HTTP Server on Microsoft Windows,有省略:
- 可用 Windows 提供的两种机制指定通过网络访问文件:
- 映射的驱动器号允许管理员维护到 Apache httpd 配置之外的特定计算机和路径的映射。但是,这些映射仅与交互式会话相关联,并且在 Apache httpd 作为服务启动时不能直接用于它。在 httpd.conf 中仅对网络资源使用 UNC(Universal Naming Convention,通用命名约定) 路径,以便无论如何启动 Apache httpd,都可以一致地访问这些资源。(晦涩难懂且容易出错的过程可能会绕过对映射驱动器号的限制,但不建议这样做。)
- 将 Apache httpd 作为服务运行时,您必须创建一个单独的帐户才能访问网络资源,如上所述。
8 配置虚拟主机
如下内容摘自 Apache 手册:
- Apache HTTP Server 是一个开放源码的网页服务器。
- 用 notepad 配置(需管理员权限) Apache。
- httpd.conf 是主配置文件。放置在主配置文件中的指令适用于整个服务器。当配置文件有错误时,Apache 是不能启动的,直到没有错误提示为止。
- 只有 Apache 在启动或重新启动时才能识别对主配置文件的更改。
- Apache 由 conf 子目录中的文件配置。
- Apache 是一个模块化服务器。这意味着核心服务器中只包含最基本的功能。
- Apache 可以同时为许多不同的网站提供服务。这称为虚拟主机。指令也可以通过将它们放在
<VirtualHost>
部分中来限定范围,以便它们仅适用于特定网站的请求。 - 控制进程创建的指令只能放在主服务器上下文中。
- 放置在 .htaccess 文件(分布式隐含配置文件)中的指令适用于放置文件的目录和所有子目录。.htaccess 文件遵循与主配置文件相同的语法。由于每次请求都会读取 .htaccess 文件,因此对这些 .htaccess 文件所做的更改会立即生效。
- 要查找可以放在 .htaccess 文件中的指令,请检查指令的上下文。服务器管理员通过在主配置文件中配置 AllowOverride 指令,进一步控制可以在 .htaccess 文件中放置哪些指令。
- 文件系统是操作系统可以看到的磁盘视图。网站空间是由 Web 服务器提供并由客户端查看的站点视图。 网站空间不需要直接映射到文件系统,因为网页可以从数据库或其他位置动态生成。
- 配置虚拟主机可确定 Apache 如何响应不同的 IP 地址、主机名和端口。
- Listen 指令告诉服务器仅接受指定端口或地址和端口组合的传入请求。如果在 Listen 指令中仅指定了端口号,则服务器将监听所有接口上的给定端口。如果给出 IP 地址和端口,服务器将监听给定的端口和接口。可以使用多个 Listen 指令来指定要监听的多个地址和端口。服务器将响应来自任何列出的地址和端口的请求。IPv6 地址必须用方括号括起来,如
Listen [2001:db8::a00:20ff:fea7:ccea]:80
。 - 如何使用虚拟主机?Listen 指令不实现虚拟主机,它只告诉主服务器要监听的地址和端口。如果未使用
<VirtualHost>
指令,则服务器对所有已接受的请求的行为方式相同。但是,<VirtualHost>
可用于为一或多个地址或端口指定不同的行为。要实现<VirtualHost>
,必须首先告诉服务器监听要使用的地址和端口。然后,应为指定的地址和端口创建<VirtualHost>
部分,以设置此虚拟主机的行为。请注意,如果为服务器未侦听的地址和端口设置<VirtualHost>
,则无法访问它。设置详情可参考 Apache 虚拟主机。 - Apache 虚拟主机类型有两种:基于域名,基于地址或 IP。前者用于在单一 IP 地址上托管多个虚拟站点,即多个域名。后者需要在服务器上配置多个 IP 地址,即创建多少个虚拟主机,就需要配置多少个 IP 地址。
9 Apache 将 URL 映射到文件
本文将介绍 Apache HTTP Server 如何使用请求的 URL 来确定从中提供文件的文件系统位置。这部分内容较多,仅摘抄 DocumentRoot 部分如下:
- 在决定为给定请求提供什么文件时,httpd 的默认行为是获取请求的 URL-Path(主机名和端口后面的 URL 部分),并将其添加到配置文件中指定的 DocumentRoot 的末尾。因此,DocumentRoot 下面的文件和目录构成了可从 Web 上看到的基本文档树。
- 例如,若 DocumentRoot 设为 /var/www/html,则对http://www.example.com
/fish/guppies.html
的请求,会将 /var/www/html/fish/guppies.html
发送到客户。 - 如请求目录(即以/结尾的路径),则从该目录提供的文件由 DirectoryIndex 指令定义。例如,若 DocumentRoot 设为 /var/www/html/,则需:
DirectoryIndex index.html index.php
Shell
- 然后,对 http://www.example.com/fish/ 的请求将导致 httpd 尝试提供 /var/www/html/fish/
index.html
。如果该文件不存在,它将接下来尝试提供文件 /var/www/html/fish/index.php
。 - 如果这两个文件都不存在,则下一步是尝试目录索引,加载 mod_autoindex 并配置为允许该目录索引。
- httpd 还具有虚拟主机功能,服务器可以接收多个主机的请求。在这种情况下,可以为每个虚拟主机指定不同的 DocumentRoot,或者,模块 mod_vhost_alias 提供的指令可用于根据请求的 IP 地址或主机名动态确定从中提供内容的适当位置。
10 文件目录释义
11 Apache for Windows & Apache for Unix 的主要区别
如下内容译自 Using Apache HTTP Server on Microsoft Windows,有省略:
- 因为适用于 Windows 的 Apache 是多线程的,所以它不会像 Apache 在 Unix 上那样为每个请求使用单独的进程。相反,通常只有两个Apache进程在运行:一个父进程和一个处理请求的子进程。在子进程中,每个请求都由单独的线程处理。
- 警告: 启动新的子进程时,将重新读取服务器配置文件。如果您修改了 httpd.conf,则新子项可能无法启动,或者您可能会收到意外的结果。
- 接受文件名作为参数的指令必须使用 Windows 文件名而不是 Unix 文件名。但是,由于 Apache 可能会将反斜杠解释为“转义字符”序列,因此应始终在路径名中使用正斜杠,而不是反斜杠。
- 虽然文件名在 Windows 上通常不区分大小写,但在将 URL 映射到文件系统之前,它们仍然在内部被视为区分大小写。如果您希望确保在 URL 中仅使用小写字母,则可以使用类似以下格式的内容:
- 运行时,Apache 只需要对日志目录和任何已配置的缓存目录树具有写入访问权限。Apache 必须验证所有路径名。这意味着 Apache 评估的每个目录(从驱动器根目录到目录叶)都必须具有读取、列出和遍历目录权限。
- 适用于 Windows 的 Apache 包含在运行时加载模块的功能,而无需重新编译服务器。如果正常编译,它将在Apache2.4模块目录中安装许多可选模块。若要激活这些模块或其他模块,必须使用 LoadModule 指令。
- 由于在 Windows 中管理名称为 .htaccess 之类的文件通常很困难,因此您可能会发现使用 AccessFilename 指令更改此每个目录配置文件的名称很有用。
- 在 Windows NT 上运行时,Apache 启动期间的任何错误都会记录到 Windows 事件日志中。可以使用事件查看器查看 Windows 应用程序事件日志,例如“开始”-“设置”-“控制面板”-“管理工具”-“事件查看器”。
12 Apache 3 发布
Apache Dolphin Scheduler 3.0.1 发布,对核心及 UI 相关进行优化
参考
- 如何查看系统是否有安装apache列出了 Windows、Linux & Mac 三个系统下的查看方法
- openssl 3.0 和 1.1.x 区别
- 历时3年,OpenSSL 3.0 正式发布!弃用所有低级别API
- Apache2.4 的安装与配置
- Windows环境下安装Apache2.4 详细解决已知问题
- Apache 2.4(一)下载、安装配置与卸载
- Apache 2.4(二) 虚拟 Web 服务器配置
- Compiling Apache for Microsoft Windows
- Using Apache HTTP Server on Microsoft Windows
- Apache HTTP Server Version 2.4 Documentation
- HTTP 的重定向