# 编译与安装
本文仅阐述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`指令在一个不同的端口监听。经过一段时间的测试以发现可能存在的问题,然后再做出最后的决定。
- Apache HTTP Server Version 2.2 文档 [最后更新:2006年3月21日]
- 版本说明
- 从1.3升级到2.0
- 从2.0升级到2.2
- Apache 2.2 新特性概述
- Apache 2.0 新特性概述
- The Apache License, Version 2.0
- 参考手册
- 编译与安装
- 启动Apache
- 停止和重启
- 配置文件
- 配置段(容器)
- 缓冲指南
- 服务器全局配置
- 日志文件
- 从URL到文件系统的映射
- 安全方面的提示
- 动态共享对象(DSO)支持
- 内容协商
- 自定义错误响应
- 地址和端口的绑定(Binding)
- 多路处理模块
- Apache的环境变量
- Apache处理器的使用
- 过滤器(Filter)
- suEXEC支持
- 性能方面的提示
- URL重写指南
- Apache虚拟主机文档
- 基于主机名的虚拟主机
- 基于IP地址的虚拟主机
- 大批量虚拟主机的动态配置
- 虚拟主机示例
- 深入研究虚拟主机的匹配
- 文件描述符限制
- 关于DNS和Apache
- 常见问题
- 经常问到的问题
- Apache的SSL/TLS加密
- SSL/TLS高强度加密:绪论
- SSL/TLS高强度加密:兼容性
- SSL/TLS高强度加密:如何...?
- SSL/TLS Strong Encryption: FAQ
- 如何.../指南
- 认证、授权、访问控制
- CGI动态页面
- 服务器端包含入门
- .htaccess文件
- 用户网站目录
- 针对特定平台的说明
- 在Microsoft Windows中使用Apache
- 在Microsoft Windows上编译Apache
- Using Apache With Novell NetWare
- Running a High-Performance Web Server on HPUX
- The Apache EBCDIC Port
- 服务器和支持程序
- httpd - Apache超文本传输协议服务器
- ab - Apache HTTP服务器性能测试工具
- apachectl - Apache HTTP服务器控制接口
- apxs - Apache 扩展工具
- configure - 配置源代码树
- dbmmanage - 管理DBM格式的用户认证文件
- htcacheclean - 清理磁盘缓冲区
- htdbm - 操作DBM密码数据库
- htdigest - 管理用于摘要认证的用户文件
- httxt2dbm - 生成RewriteMap指令使用的dbm文件
- htpasswd - 管理用于基本认证的用户文件
- logresolve - 解析Apache日志中的IP地址为主机名
- rotatelogs - 滚动Apache日志的管道日志程序
- suexec - 在执行外部程序之前切换用户
- 其他程序
- 杂项文档
- 与Apache相关的标准
- Apache模块
- 描述模块的术语
- 描述指令的术语
- Apache核心(Core)特性
- Apache MPM 公共指令
- Apache MPM beos
- Apache MPM event
- Apache MPM netware
- Apache MPM os2
- Apache MPM prefork
- Apache MPM winnt
- Apache MPM worker
- Apache模块 mod_actions
- Apache模块 mod_alias
- Apache模块 mod_asis
- Apache模块 mod_auth_basic
- Apache模块 mod_auth_digest
- Apache模块 mod_authn_alias
- Apache模块 mod_authn_anon
- Apache模块 mod_authn_dbd
- Apache模块 mod_authn_dbm
- Apache模块 mod_authn_default
- Apache模块 mod_authn_file
- Apache模块 mod_authnz_ldap
- Apache模块 mod_authz_dbm
- Apache模块 mod_authz_default
- Apache模块 mod_authz_groupfile
- Apache模块 mod_authz_host
- Apache模块 mod_authz_owner
- Apache模块 mod_authz_user
- Apache模块 mod_autoindex
- Apache模块 mod_cache
- Apache模块 mod_cern_meta
- Apache模块 mod_cgi
- Apache模块 mod_cgid
- Apache模块 mod_charset_lite
- Apache模块 mod_dav
- Apache模块 mod_dav_fs
- Apache模块 mod_dav_lock
- Apache模块 mod_dbd
- Apache模块 mod_deflate
- Apache模块 mod_dir
- Apache模块 mod_disk_cache
- Apache模块 mod_dumpio
- Apache模块 mod_echo
- Apache模块 mod_env
- Apache模块 mod_example
- Apache模块 mod_expires
- Apache模块 mod_ext_filter
- Apache模块 mod_file_cache
- Apache模块 mod_filter
- Apache模块 mod_headers
- Apache模块 mod_ident
- Apache模块 mod_imagemap
- Apache模块 mod_include
- Apache模块 mod_info
- Apache模块 mod_isapi
- Apache模块 mod_ldap
- Apache模块 mod_log_config
- Apache模块 mod_log_forensic
- Apache模块 mod_logio
- Apache模块 mod_mem_cache
- Apache模块 mod_mime
- Apache模块 mod_mime_magic
- Apache模块 mod_negotiation
- Apache模块 mod_nw_ssl
- Apache模块 mod_proxy
- Apache模块 mod_proxy_ajp
- Apache模块 mod_proxy_balancer
- Apache模块 mod_proxy_connect
- Apache模块 mod_proxy_ftp
- Apache模块 mod_proxy_http
- Apache模块 mod_rewrite
- Apache模块 mod_setenvif
- Apache模块 mod_so
- Apache模块 mod_speling
- Apache模块 mod_ssl
- Apache模块 mod_status
- Apache模块 mod_suexec
- Apache模块 mod_unique_id
- Apache模块 mod_userdir
- Apache模块 mod_usertrack
- Apache模块 mod_version
- Apache模块 mod_vhost_alias
- Developer Documentation for Apache 2.0
- Apache 1.3 API notes
- Debugging Memory Allocation in APR
- Documenting Apache 2.0
- Apache 2.0 Hook Functions
- Converting Modules from Apache 1.3 to Apache 2.0
- Request Processing in Apache 2.0
- How filters work in Apache 2.0
- Apache 2.0 Thread Safety Issues
- 词汇和索引
- 词汇表
- 指令索引
- 指令速查
- 模块索引
- 站点导航