3. 获取、构建和安装带有基本模块的 Apache

3.1. 获取并解压 Apache 源代码

3.1.1. 什么是 Apache

 

Apache 项目是一个协作软件开发项目,旨在创建一个健壮、商业级、功能丰富且免费可用的 HTTP (Web) 服务器的源代码实现。该项目由一个位于世界各地的志愿者小组共同管理,他们使用互联网和 Web 进行沟通、计划和开发服务器及其相关文档。这些志愿者被称为 Apache 组织。此外,数百名用户为该项目贡献了想法、代码和文档。本文档旨在简要描述 Apache 组织的历史并表彰众多贡献者。

 
--www.apache.org 

它简直是最好的 Web 服务器软件,它非常灵活,可以根据您的需求进行配置,并且极其稳定。我个人从未在生产(=非实验性)环境中遇到过崩溃。

3.1.2. 下载源代码

原始站点 https://apache.ac.cn/dist/httpd/
cd /usr/local/

tar -xvzf apache_1.3.27.tar.gz

3.1.3. 大型站点的补丁

如果您的 Web 服务器需要同时响应大量请求,并且您的机器足够强大以处理如此大量的请求,您可以更改最大运行进程数的限制。

从以下地址下载补丁: http://www.delouw.ch/linux/apache-patch_HARD_SERVER_LIMIT.txt

--- httpd.h     Thu Mar 21 18:07:34 2002
+++ httpd.h-new Sun Apr  7 13:34:11 2002
@@ -320,7 +320,7 @@
 #elif defined(NETWARE)
 #define HARD_SERVER_LIMIT 2048
 #else
-#define HARD_SERVER_LIMIT 256
+#define HARD_SERVER_LIMIT 512
 #endif
 #endif

此补丁将最大并发访问客户端数增加到 512。如果您修改了内核并编辑了您的/etc/security/limits.conf

Caution避免任务耗尽
 

如果设置错误,这可能会导致“自拒绝服务攻击”。请确保您为 root 用户保留了足够的进程。)

使用以下命令应用补丁

cd /usr/local/apache_1.3.27/src/include

patch -p0 < apache-patch_HARD_SERVER_LIMIT.txt

3.2. mod_ssl

3.2.1. 什么是 mod_ssl

 

该模块通过安全套接字层 (SSL v2/v3) 和传输层安全 (TLS v1) 协议,借助开源 SSL/TLS 工具包 OpenSSL(基于 Eric A. Young 和 Tim J. Hudson 的 SSLeay),为 Apache 1.3 Web 服务器提供强大的加密功能。

 
--www.modssl.org 

此模块用于启用 Apache 的 SSL 请求 (https)。它将补丁应用于 Apache 源代码并扩展了其 API(应用程序编程接口)。结果称为 EAPI(扩展应用程序编程接口)。

Caution编译模块时使用编译器标志
 

确保为您的 Apache 服务器编译的任何模块都带有编译器标志-DEAPI,否则您的 Web 服务器可能会崩溃或无法启动。

我所知道的几乎所有模块都添加了-DEAPI标志,除了 mod_jservmod_jk

3.2.2. 下载源代码

原始站点:http://www.modssl.org

3.2.3. 将补丁应用于 Apache 源代码

cd /usr/local/

tar -xvzf mod_ssl-2.8.12-1.3.27.tar.gz
cd mod_ssl-2.8.12-1.3.27/

./configure --with-apache=../apache_1.3.27 

3.3. mod_perl

3.3.1. 什么是 mod_perl

 

使用 mod_perl 可以完全用 Perl 编写 Apache 模块。此外,嵌入在服务器中的持久解释器避免了启动外部解释器的开销和 Perl 启动时间的损失。

 
--perl.apache.org 

mod_perl 是一种 cgi-bin 的替代品。cgi 通常为每个请求派生一个新进程,并产生开销。使用 mod_perl,perl 解释器持久地加载到 Apache 服务器中,不需要为每个请求派生进程。

3.3.2. 下载源代码

原始站点: https://apache.ac.cn/dist/perl

3.3.3. 构建和安装

cd /usr/local

tar -xvzf mod_perl-1.27.tar.gz

cd mod_perl-1.27

perl Makefile.PL \
EVERYTHING=1 \
APACHE_SRC=../apache_1.3.27/src \
USE_APACI=1 \
PREP_HTTPD=1 \
DO_HTTPD=1

make
make install

CautionMod_perl 无法编译为 DSO
 

不要将 mod_perl 编译为 DSO(动态共享对象)!根据各种来源,Apache 会崩溃(我从未尝试过)。

3.4. 配置和构建 Apache

现在,两个静态模块 mod_sslmod_perl 已配置,并且 Apache 源代码已打上补丁,我们可以继续构建 Apache。

3.4.1. 构建和安装

EAPI_MM="/usr/local/mm-1.2.2" SSL_BASE="/usr/local/ssl" \
./configure \
--enable-module=unique_id \
--enable-module=rewrite \
--enable-module=speling \
--enable-module=expires \
--enable-module=info \
--enable-module=log_agent \
--enable-module=log_referer \
--enable-module=usertrack \
--enable-module=proxy \
--enable-module=userdir \
--enable-module=so \
--enable-shared=ssl \
--enable-module=ssl \
--activate-module=src/modules/perl/libperl.a \
--enable-module=perl

make
make install

3.4.2. 创建自签名 SSL 证书

cd /usr/local/ssl/bin

./openssl req -new > new.cert.csr
./openssl rsa -in privkey.pem -out new.cert.key
./openssl x509 -in new.cert.csr -out new.cert.cert \
-req -signkey new.cert.key -days 999

cp new.cert.key /usr/local/apache/conf/ssl.key/server.key
cp new.cert.cert /usr/local/apache/conf/ssl.crt/server.crt

Tip常用名称
 

OpenSSL 会询问不同的信息。一个常见的错误是输入错误的“常用名称”。这应该是您服务器的 FQHN(完全限定主机名),例如 www.foo.org。