ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 编译与安装 本文仅阐述Apache在Unix和类Unix系统中的编译和安装,在Windows中的编译和安装可以参考[在Microsoft Windows中使用Apache](#calibre_link-269)。其他平台可以参见[针对特定平台的说明](#calibre_link-274)文档。 像其它许多开源项目一样,Apache使用`libtool`和`autoconf`建立编译环境。 如果你只进行很小的版本升级(比如2.2.54→2.2.55),请直接跳转到下面的[升级](#calibre_link-354)部分。 ## 针对心急者的概述 | [下载](#calibre_link-356) | `$ lynx http://httpd.apache.org/download.cgi` | |:--- |:--- | | [解压](#calibre_link-357) | `$ gzip -d httpd-_NN_.tar.gz` `$ tar xvf httpd-_NN_.tar` `$ cd httpd-_NN_` | | [配置](#calibre_link-358) | `$ ./configure --prefix=_PREFIX_` | | [编译](#calibre_link-359) | `$ make` | | [安装](#calibre_link-360) | `$ make install` | | [配置](#calibre_link-361) | `$ vi _PREFIX_/conf/httpd.conf` | | [测试](#calibre_link-362) | `$ _PREFIX_/bin/apachectl -k start` | 其中_NN_必须用当前的副版本号替代;_PREFIX_是服务器被安装到文件系统中的路径名,如果没有指定_PREFIX_,默认会装到`/usr/local/apache2` 下面从编译和安装Apache httpd的要求开始详细阐述编译和安装的每个步骤。 ## 要求 编译Apache的要求如下: 磁盘空间 必须保证有50MB以上的自由临时磁盘空间。Apache安装完毕后会占据10MB左右的空间,实际的磁盘空间需求会因编译设置和是否安装第三方模块而有所不同。 ANSI-C编译器及编译环境 必须装有ANSI-C编译器,推荐使用[自由软件基金会(FSF)](http://www.gnu.org/)的[GCC](http://gcc.gnu.org/)。如果没有GCC,那么要确保使用的编译器符合ANSI标准,而且`PATH`中必须包含指向基本编译工具比如`make`的路径。 确保准确的时间 由于HTTP协议的元素都会用到时间,有必要了解一下你的系统所使用的时间同步机制。在基于网络时间协议(NTP)的系统中,一般是用`ntpdate`或`xntpd`来同步时间。有关NTP软件的资料请参见[NTP主页](http://www.ntp.org)。 [Perl 5](http://www.perl.org/) [可选] 有些用Perl写的支持脚本,如`apxs`或`dbmmanage` ,需要Perl5解释器(5.003或以上的版本就足够了)。如果系统中存在多个Perl解释器,比如有系统提供的Perl 4,还有你自己安装的Perl 5,推荐你使用 `--with-perl` 选项来确保`configure`脚本使用正确的版本。如果`configure`没有没找到Perl 5也没关系,这并不影响Apache httpd的编译和安装,只是相关的支持脚本不能使用而已。 [apr/apr-util >= 1.2](http://apr.apache.org) `apr`和`apr-util`包含在Apache httpd的发行源代码中,并且在绝大多数情况下使用都不会出现问题。当然,如果`apr`或`apr-util`的1.0或1.1版本已经安装在你的系统中了,则必须将你的`apr`/`apr-util`升级到1.2版本,或者将httpd单独分开编译。要使用发行源代码中自带的`apr`/`apr-util`源代码进行安装,你必须手动完成: ``` # 编译和安装 apr 1.2 cd srclib/apr ./configure --prefix=/usr/local/apr-httpd/ make make install # 编译和安装 apr-util 1.2 cd ../apr-util ./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/ make make install # 配置 httpd cd ../../ ./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ ``` ## 下载 Apache可以从[Apache HTTP服务器下载站点](http://httpd.apache.org/download.cgi)及其镜像站点下载。大多数类UNIX系统的Apache用户最好的选择是下载源代码并编译一个适合自己的版本,这个过程(下面将要讲述)是很简单的,它允许你根据自己的需求进行定制。另一方面编译好的二进制版本通常没有进行及时的更新。如果你下载的是编译好的二进制版本,请按照其中的`INSTALL.bindist`文件进行安装。 下载完毕后,应该对下载来的tar包作[PGP签名校验](http://httpd.apache.org/dev/verification.html),以确保其完整而且未被篡改过。([PGP下载页面](http://httpd.apache.org/download.cgi#verify)) ## 解压 解压Apache httpd的tar包很简单: ``` $ gzip -d httpd-_NN_.tar.gz $ tar xvf httpd-_NN_.tar ``` 这样就在当前目录下新建了一个包含发行版源代码的目录,必须`cd`进入这个目录以继续服务器的编译。 ## 配置源代码树 这一步是根据你的特定平台和个人需求配置源代码树。位于发行源代码根目录的`configure`脚本会完成这个步骤(对下载Apache CVS版源代码的开发者,需要装有`autoconf`和`libtool` ,并需要执行`buildconf` ,对于官方的发行版则没这个必要)。 要想用所有的默认值配置源代码树只要简单的执行 `./configure` 命令就可以了,同时`configure`还可以接受命令行参数以改变默认值。 最重要的选项是Apache安装目录的前缀:`--prefix` ,因为Apache需要知道这个目录才能正常运作。更多的微调选项请参考[配置选项详解](#calibre_link-364)。 这样,你就可以通过在配置选项中指定要启用或禁用哪些[模块](#calibre_link-1)来定制Apache的[特性](#calibre_link-365)。[Base](#calibre_link-12)组的模块默认包含在Apache中。其他组的模块可以通过 `--enable-module` 指令启用。其中module是模块名去掉"`mod_`"并将下划线转换成连字符后的字符串。你也可以使用 `--enable-module=shared` 指令将模块编译为可在运行时加载和卸载的[动态共享对象(DSO)](#calibre_link-259)。同样的,你也可以使用 `--disable-module` 指令禁用[Base](#calibre_link-12)组的模块。注意,使用这些指令的时候`configure`不会对你拼写错误的模块发出警告说找不到某某模块,而只是简单的忽略这个选项。 另外,有时候还必须提供给`configure`脚本关于编译器、库、头文件位置的更多信息。这些可以通过环境变量或者命令行选项传递给`configure`脚本。要了解更多信息,请参考`配置源代码树`。 为了让你对能指定什么有一个简单的印象,此例演示编译Apache ,并将其安装在`/sw/pkg/apache`目录,指定了一个特定的编译器以及编译参数,而且允许今后将两个附加的模块`mod_rewrite`和`mod_speling`通过DSO机制在运行时动态加载: ``` $ CC="pgcc" CFLAGS="-O2" \ ./configure --prefix=/sw/pkg/apache \ --enable-rewrite=shared \ --enable-speling=shared ``` `configure`需要运行几分钟,以测试指定的功能在你的系统中是否有效,并建立稍后编译时所需的许多Makefile文件。 ## 编译 运行以下命令你就可以编译Apache的各个部分了: ``` $ make ``` 请耐心等候,因为对一个基本配置的编译,需要运行几分钟左右,实际需要的时间会因为你的硬件和选择的模块数量有很大不同。 ## 安装 现在可以在_PREFIX_目录(参见上述的 `--prefix` 参数)下安装了,执行: ``` $ make install ``` 如果是升级,安装程序不会覆盖你的配置文件和文档。 ## 配置 接着,通过修改`_PREFIX_/conf/`目录下的[配置文件](#calibre_link-255),来配置Apache HTTP服务器。 ``` $ vi _PREFIX_/conf/httpd.conf ``` [docs/manual/](#calibre_link-6)下有Apache使用手册,[http://httpd.apache.org/docs/2.2/](http://httpd.apache.org/docs/2.2/)有最新的文档,你还可以查看完整的[指令索引](#calibre_link-2)。 ## 测试 现在,可以执行下述命令立即[启动](#calibre_link-250)你的Apache HTTP服务器: ``` $ _PREFIX_/bin/apachectl -k start ``` 你应该可以用`http://localhost/`来请求你的第一个网页了,这个网页位于`DocumentRoot`目录下,通常是`_PREFIX_/htdocs/` 。随后,可以这样[停止](#calibre_link-31)服务器: ``` $ _PREFIX_/bin/apachectl -k stop ``` ## 升级 升级的第一步是阅读源代码目录中的发布公告(release announcement)和`CHANGES`文件以寻找可能会对你的站点产生影响的变化。如果主板本号的变化(例如1.3→2.0或2.0→2.2)表明编译时和运行时的配置发生了重大变化,需要手动调整,所有模块也需要升级以兼容新版本的模块API 。 小幅度的版本升级(例如:2.2.55→2.2.57)很容易。`make install` 的过程不会改写任何已经存在的文档、日志、配置文件。此外,开发者也会尽量兼容上一版本的`configure`选项、运行时配置、模块API 。大多数情况下,你将能够使用与上一版本完全相同的`configure`命令行和运行时配置,而你原来的所有模块也将正常工作。 如果你保存了上一次安装后`build`子目录中的`config.nice`文件,升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的`configure`命令行。你只需要将`config.nice`文件复制到新的源代码目录树的根文件夹并进行你希望的修改后,然后运行下面的命令即可完成升级: ``` $ ./config.nice $ make $ make install $ _PREFIX_/bin/apachectl -k graceful-stop $ _PREFIX_/bin/apachectl -k start ``` 你应该总是在将新版本的Apache投入正式运行前,对这个新版本进行足够的、针对你的实际运行环境的测试。比如,你可以使用一个不同的 `--prefix` 设置将新版本安装在一个不同的目录,并使用`Listen`指令在一个不同的端口监听。经过一段时间的测试以发现可能存在的问题,然后再做出最后的决定。