65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 Windows 上构建 Apache - 1.0

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2018年6月12日

CPOL

5分钟阅读

viewsIcon

14803

本文介绍如何从源代码在 Windows 上构建 Apache Web 服务器。

引言

从源代码构建大型项目的过程从未一帆风顺。构建步骤会随着版本的不同而变化,我们还需要处理依赖项和为 UNIX 系统设计的代码。因此,我能做的最好的事情就是将所有零散的部分收集到一起,并提供一步一步的说明。

我的目标是写一系列文章,介绍如何设置 Apache 服务器,创建一个带有登录系统的简单网站(因此我们还需要 PHPSQL),更重要的是,深入研究 C 源代码层面的运作。这种理解将帮助我们找到安全漏洞(或手动创建一个),并研究如何在不知道实际登录名和密码的情况下获取用户信息。

每篇文章都有一个数字索引。第一篇文章是 1.0,第二篇是 1.1,以此类推。为了避免沮丧和挫败感,我将按小步骤进行,所以每个步骤不一定对应逻辑上规定的步骤。

分步构建

我们将构建 Apache 2.4.33。请访问 此链接并下载源代码存档。解压缩并将其重命名为 httpd。现在,我们需要下载依赖项

  1. apr
  2. apr-iconv
  3. apr-util
  4. expat
  5. pcre(需要安装 cmake 才能构建)

前三个可以从 这里 下载。我们将使用 Apr 1.6.3Apr-util 1.6.1Apr-iconv 1.2.2。下载存档,解压缩,并将解压后的文件夹放入 httpd\srclib。将它们分别重命名为 aprapr-utilapr-iconv

这里 下载 expat。我们将使用 Expat 2.2.5。下载存档,解压缩,进入解压后的文件夹,然后将嵌套的 expat 文件夹放入 httpd\srclib

这里 下载 pcre。我们将使用 Pcre 8.42(有一个名为 pcre2 的较新版本,但 apache 使用的是旧版本)。下载存档,解压缩,并将解压后的文件夹放入 httpd\srclib。将其重命名为 pcre

还有一些可选的依赖项,我们将在下一篇文章中添加。现在,我们只使用最少的依赖项来满足构建过程。

Expat 构建

让我们构建 expat。转到 httpd\srclib\expat 文件夹,在 **Visual Studio** 中打开 expat.sln 解决方案。解决方案 expat 将包含 7 个项目

  1. elements
  2. expat
  3. expat_static
  4. expatw
  5. expatw_static
  6. outline
  7. xmlwf

由于我使用的是 **Visual Studio 2013**,我必须转到 **<项目属性 -> 配置属性 -> 常规 >** 并将平台工具集设置为 **Visual Studio 2013 (v120)**。现在,右键单击 expat 项目并选择 **构建** - 这将构建单个项目 expat

Pcre 构建

现在让我们构建 pcre。这是一个基于 cmake 的项目,所以我们需要从 这里 下载 cmake 二进制文件并安装。转到 httpd\srclib\pcre 文件夹并创建一个名为 build 的子文件夹。启动控制台并 cd 到新创建的 build 文件夹。执行以下命令

cmake --help

在输出中,您将看到可用的生成器。要为 **Visual Studio 2013** 生成解决方案文件,我们需要 **Visual Studio 12 2013** 生成器。执行以下命令

cmake -G "Visual Studio 12 2013" ..

在 Visual Studio 中打开生成的 PCRE.sln 解决方案。解决方案 PCRE 将包含 12 个项目。右键单击 pcre 项目并选择构建 - 这将构建 2 个项目:pcreZERO_CHECK

Apr 构建

现在让我们构建 aprapr-iconvapr-util。转到 httpd\srclib\apr-util 文件夹,在 **Visual Studio** 中打开 aprutil.dsw 文件。在旧版本的 **Visual Studio** 中,*.sln* 文件具有 *.dsw* 扩展名,*.vcxproj* 文件具有 *.dsp* 扩展名。**Visual Studio** 将打开以下升级窗口

单击 **确定** 并等待所有 25 个项目升级。准备解决方案需要一些时间,因此它可能看起来已挂起,最后,它将在您的浏览器中打开迁移报告网页。

右键单击 libaprutil 项目并转到项目设置

< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)

< 配置属性 -> 链接器 -> 常规 -> 其他库目录 >:添加指向 httpd\srclib\expat\win32\bin\Debug 目录的路径(它包含导入库文件)

< 配置属性 -> 链接器 -> 输入 >:将 $(XML_PARSER).lib 修改为 libexpat.lib

右键单击 aprutil 项目并转到项目设置

< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)

右键单击 libaprutil 项目并选择构建 - 这将构建 7 个项目。

Apache 构建

现在让我们构建 apache 本身。转到 httpd 文件夹并打开 Apache.dsw。您将再次看到升级窗口

单击 **确定**,稍后,您将看到以下通知窗口

勾选 **对所有相似情况执行此操作** 并单击 **否**。转换后,转到 libhttpd 项目设置

< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\pcre\build 目录的路径(它包含头文件)

< 配置属性 -> 链接器 -> 常规 -> 其他库目录 >:添加指向 httpd\srclib\pcre\build\Debug 目录的路径(它包含静态库文件)

< 配置属性 -> 链接器 -> 输入 >:确保我们有 pcred.lib

打开 util_pcre.c 文件

在包含 pcre.h 头文件之前添加 PCRE_STATIC

#include "httpd.h"
#include "apr_strings.h"
#include "apr_tables.h"
#define PCRE_STATIC
#include "pcre.h"

#define APR_WANT_STRFUNC
#include "apr_want.h"

转到 BuildBin 项目设置

< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)

转到 httpd\support\win32 文件夹并打开 ApacheMonitor.rc 文件。注释掉以下行

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST  "ApacheMonitor.manifest"

现在,右键单击 BuildBin 项目并选择 Build - 这将构建我们的 Web 服务器(124 个项目)。

后记

请注意,我们编译的是调试配置,因为我们将在 **Visual Studio** 中调试正在运行的服务器以查看正在发生的情况。在下一篇文章中,我们将添加 opensslzlib 和其他可选库,并修复 config 文件,以便我们的服务器可以运行。

© . All rights reserved.