Apache编译与安装

http://www.kreny.com/docs/apache2.0/install.html


概要

Download $ lynx http://www.apache.org/dist/httpd/httpd-2_0_NN .tar.gz
Extract $ gzip -d httpd-2_0_NN .tar.gz
$ tar xvf httpd-2_0_NN .tar
Configure $ ./configure --prefix=PREFIX
Compile $ make
Install $ make install
Customize $ vi PREFIX /conf/httpd.conf
Test $ PREFIX /bin/apachectl start

其中NN 必须用当前副版本号替代;PREFIX 是服务器被装到文件系统中的路径名,如果没有指定PREFIX , 默认会被装到/usr/local/apache2

下面会详细阐述编译和安装的每个步骤,先从编译和安装Apache HTTPD的要求开始。

要求

编译Apache的要求如下:

磁盘空间
必须保证有50MB以上的临时磁盘自由空间。Apache安装完毕后会占据10MB左右的空间,实际磁盘需求会因编译设置和是否安装 第三方模块而有所不同。
ANSI-C编译器及其支持环境
必须装有ANSI-C编译器,推荐使用来自 Free Software Foundation (FSF)GNU C compiler (GCC) (2.7.2 版本很好)。如果没有GCC,那么要确保现有的编译器符合ANSI标准,而且 PATH 中必须包含指向基本编译工具比如 make 的 路径。
确保正确的时间
由于HTTP协议的元素都会用到时间,有必要了解一下你的系统的时间同步机制。在基于Network Time Protocol (NTP)的系统中,一般是用 ntpdatexntpd 来同步时间。有关NTP软件和公共时间服 务器的资料请参见Usenet新闻组 comp.protocols.time.ntpNTP homepage
Perl 5 [可选]
有些用Perl写的支持脚本,如 apxsdbmmanage , 会需要Perl 5解释器(5.003或以上版本就足够了),如果` configure '没找到这样的解释器也没关系,并不影 响Apache 2.0的编译和安装,只是这些支持脚本不能用而已。如果系统中存在多个Perl 解释器,比如有厂商提供的Perl 4,还有你自己找来的Perl 5,推荐用 --with-perl 选项来确保脚本 ./configure 使 用正确的版本。

下载

Apache可以从Apache Software Foundation download site 及其镜像站点 下载。

版本号缀有alpha 的是预测试版本,其运行可能正常也可能不正常;缀有beta 的 是仍需要测试和纠错的较可靠的版本。要下载最好的Apache HTTP Server的发行版,就应该选择最新的,而且文件名中既没有alpha 也 没有beta 的版本。

下载完毕后,尤其是从镜像站点下载的,应该对下载来的tar包作PGP签名校验,以确保其完整而且未被篡改过。校验有两个步骤,第一步,必 须从Apache distribution site 获 得一个密钥(KEYS) (为确保此密钥 文件本身未被篡改,使用Apache早先发行版中的或者导入 来自公共密钥服务器的密钥也许是个好办法),用以下命令导入到你的个人密钥环中(可能会因你的PGP版本有所不同):

$ pgp < KEYS

$ gpg --import KEYS

第二步,从main Apache website 获得PGP签名以校验tar包。这个签名的文件名由其原tar包文件名后附加.asc 组成。接着,用以 下命令来校验发行版(也可能会因你的PGP版本有所不同):

$ pgp httpd-2_0_NN .tar.gz.asc

$ gpg --verify httpd-2_0_NN .tar.gz.asc

应该会看见这样的信息:

Good signature from user "Martin Kraemer <martin@apache.org>".

也可能会看见“the relationship between the key and the signer of the key cannot be verified”的信息,其原因与你的密钥环中的信任关系有关,如果你信任这个密钥 文件,那就没关 系。

解压

解压Apache HTTPD的tar包很简单:

$ gzip -d httpd-2_0_NN .tar.gz
$ tar xvf httpd-2_0_NN .tar

这样就在当前目录下新建了一个包含发行版源代码的目录,必须cd 进入这个目录以继续服务器的编译。

代码树的设置

这一步是为你的特定平台和个人需求设置代码树。位于发行版主目录的configure 脚本会完成这个步骤(对下 载Apache源代码树的CVS版本的开发者,需要装有autoconflibtool ,并执行buildconf , 对于官方发行版则没必要)。

简单执行./configure 可以用所有的默认值设置代码树,同时./configure 可 以接受命令行参数以改变默认值。通常,环境变量要预先设置,其他选项可以跟在./configure 后面。除了许多迎合你的需 求的选项,最重要的选项是指示Apache应该被装在哪个目录的目录前缀(prefix),因为Apache需要这个目录以正常运作。

为了让你对能指定什么有一个简单的印象,此例演示编译Apache,用了一个特定的编译器及其编译参数,而且允许今后通过DSO机制动态装 载两个附加的模块modules mod_rewrite和mod_speling:

$ CC="pgcc" CFLAGS="-O2" /
./configure --prefix=/sw/pkg/apache /
--enable-rewrite=shared /
--enable-speling=shared

configure 需要运行几分钟,以测试功能是否在你的系统中有效,并建立稍后编译服务器所需要的许多 Makefile。

获得Apache设置参数的最简单方法是执行./configure --help ,其中有对大多数参数和环境 变量的简要说明。

环境变量

autoconf 编译进程用了几个环境变量来设置编译环境。通常,这些变量只是改变如何编译Apache,而不 是改变服务器最终的功能。可以在执行configure 之前预先设置这些变量,而更简单的方法是象上面例子那样,直接在configure 的 命令行中指定。

CC=...
C编译器的名称
CPPFLAGS=...
各种C预处理和编译器参数
CFLAGS=...
C编译器的调试和优化参数
LDFLAGS=...
各种连接器参数
LIBS=...
连接器的库位置信息("-L" and "-l"参数)
INCLUDES=...
头文件的搜索目录("-I dir ").
TARGET=... [Default: apache]
目标执行文件名
NOTEST_CPPFLAGS=... NOTEST_CFLAGS=... NOTEST_LDFLAGS=... NOTEST_LIBS=...
这些参数与不带 NOTEST 的同名参数功能相同,但是,它们仅在autoconf执行功能测试以后才起作 用,如此就允许包含以后编译时必须的而在功能测试时会出错的参数。
SHLIB_PATH=...
编译器和连接器共享的库路径

autoconf的输出参数

--help
显示所有有效参数的用法,而并不实施任何设置
--quiet
阻止一般的"checking..."信息的出现
--verbose
在设置过程中详细显示包括被检测文件名的信息

路径名

目前有两种方法设置Apache安装其文件的路径名。首先,可以指定一个目录来安装Apache本身。

--prefix=PREFIX [Default: /usr/local/apache2]
使Apache的文件装在这个目录下

还可以把内定结构的文件装在其他目录。

--exec-prefix=EPREFIX [Default: PREFIX ]
指定安装内定结构文件的目录。

其次,使用config.layout 文件可以对各种类型的文件指定安装目录,从而更灵活地安装Apache。config.layout 文 件包含了几个设置例子,你可以参照这些例子按你的需要进行设置,其中不同类型的布局用被分入各个组,如命名为FOO<Layout FOO>...</Layout>

--enable-layout=LAYOUT
用已命名的 config.layout 布局文件来指定安装目录。

模块

Apache是模块化的服务器,核心服务器种只包含了功能最常用的模块,而扩展功能由其他模块提供。设置过程中,你必须指定需要包含的模 块。文档中有模块清单 备 查,其中状 态 为"Base"的模块会被默认地包含进核心服务器,如果你不需要包含某个模块(比如mod_userdir ), 则必须明确地禁用它;其他状态的模块(比如mod_expires ), 也必须明确启用以使之包含进核心服务器。

Apache有两种使用模块的方法,其一是永久性包含进核心;如果操作系统支持动态共享对象(DSO),而且能为autoconf 所 检测,则模块还可以被动态编译 。DSO模块的存储是独立与核心的,可以被核心使用由mod_so 模 块提供的运行时刻配置指令包含或排除。如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译 任何动态模块,需要明确指定--enable-so

--enable-MODULE [=shared]
编译并包含模块 MODULEMODULE 是文档中去掉"_module"的模块名。要将一个 模块编译成DSO,需要加 =shared 选项。
--disable-MODULE
排除可能被编译并包含的模块 MODULE
--enable-modules=MODULE-LIST
编译并包含用空格分隔的 MODULE-LIST
--enable-mods-shared=MODULE-LIST
编译并包含用空格分隔的 MODULE-LIST 成DSO。

--enable-modules--enable-mods-shared 中的MODULE-LIST 选 项通常是一个用空格分隔的模块列表,例如编译并包含enable mod_dav and mod_info,可以

./configure --enable-dav --enable-info

或者,等效地写成:

./configure --enable-modules="dav info"

另外,可以用关键字allmost 一次性包含“所有的”或者“大多数”模块,然后 再用--disable-MODULE 来排除你不需要的模块。例如,包含所有的模块为DSO,而排除 mod_info,可以

./configure --enable-mods-shared=all --disable-info

除了标准模块组,Apache 2.0还提供了一个选择,就是多道处理模块(Multi- Processing Modules) (MPMs)。编译过程中必须包含一个且只有一个MPM,MPM documentation page 有对应各种平台的默认MPM,但是也可以在configure 命令行中改变。

--with-mpm=NAME
选择叫 NAME 的MPM.

DBM

Apache的某些功能,如mod_auth_dbm mod_rewrite 中 的DBM RewriteMap 使 用简单的 键/值 数据库来实现信息快速检索。Apache内置了支持SDBM的源代码,所以数据库总是被支持的。如果要使用其他数据库类型,可以使用的configure 选 项有:

--with-gdbm[=path ] --with-ndbm[=path ] --with-berkeley-db[=path ]
如果没有指定 path ,Apache会在常规搜索路径中寻找头文件和库;明确地指定 path 会引导 Apache到 path /libpath /include 中 寻找这些文件,另外, path 可以指定特定的头文件和库的路径,并用冒号隔开。

Suexec

Apache包含了一个叫suexec 的支持程序,可 以隔离用户的CGI程序。但是,如果suexec没有被正确配置,会引发严重的安全问题,使用这个功能以前,应该仔细阅读和斟酌suexec documentation

编译

执行这个命令就可以编译Apache了

$ make

请耐心等候,因为对一个基本的配置的编译,在Pentium III/Linux 2.2上需要运行3分钟左右,实际需要的时间因你的硬件和选择的模块数量会有很大不同。

安装

现在可以在PREFIX 目录(参见上述的--prefix 参数)下安装包了,执行:

$ make install

如果是升级,安装程序不会覆盖你的配置文件和文档。

配置

接着,通过修改PREFIX /conf/下的配置文件 ,来配置 Apache HTTP服务器。

$ vi PREFIX /conf/httpd.conf

docs/manual/ 有 Apache使用手册,http://httpd.apache.org/docs-2.0/ 有 完整的配置指 令参考

测试

现在,可以执行这个命令立即启动 你的Apache HTTP服务器:

$ PREFIX /bin/apachectl start

你应该可以用URL http://localhost/ 来请求你的第一个网页了,这个网页位于DocumentRoot 目 录下,通常是PREFIX /htdocs/ 。随后,可以这样停止 服务器:

 

$ PREFIX /bin/apachectl stop

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值