Apache 谈论 IPv6
根据 Netcraft Web 服务器调查,自 1996 年 4 月以来,Apache 一直是互联网上最受欢迎的 Web 服务器。目前,超过 56% 的 Web 服务器运行 Apache。由于 Apache 在多个平台上的可移植性、可靠性、稳健性、可配置性以及它是免费且文档完善的事实,这些数字并不令人惊讶。
Apache 1.3 已确立了其作为高性能 Web 服务器的地位。然而,随着对 Web 服务器提出的要求不断发展,需要新的功能,例如更高的可靠性、安全性和性能以及可扩展性。为了响应,Apache 继续努力通过 2.0 版本来满足这些新需求,承诺提供一个更强大、更快速的 Web 服务器,并具有新的和增强的功能。
Apache 2.0 提供了许多性能改进(这是我为 Linux Journal 网站撰写的一篇文章的主题,www.linuxjournal.com/articles/4559)。然而,就本文而言,新功能之一是对 IPv6 的支持。在 2.0 版本中,如果您在存在 IPv6 支持的系统上运行 Apache,则 Apache 默认获取 IPv6 监听套接字。此外,Listen、NameVirtualHost 和 VirtualHost 指令也支持 IPv6 数字地址字符串。
在以下章节中,我们将演示如何在 Linux 内核中添加对 IPv6 的支持,然后展示如何安装最新的 Apache 版本并在 IPv6 支持下运行它。我们还将运行一些基准测试,以比较同一服务器使用 IPv4 和 IPv6 服务请求的性能。
在本节中,我们简要描述如何在 Linux 内核中启用 IPv6,这是启用 IPv6 HTTP 请求的先决条件。您的内核可能已经支持 IPv6 [请参阅第 64 页]。要添加它,第一步是下载一个稳定的 Linux 内核并解压缩它。为了我们的测试,我们从 kernel.org 下载了内核 2.4.8。
我们配置内核以启用对 IPv6 的支持。您需要启用两个选项。在“代码成熟度级别”部分,您需要启用 “提示开发和/或不完整的代码/驱动程序”。
在“网络选项”部分,您需要启用 “IPv6 协议 (实验性)”。
您可以选择将 IPv6 支持编译到内核中或作为单独的模块,具体取决于您的偏好。之后,像往常一样编译并安装内核和模块,然后使用 IPv6 支持重新启动。
有关内核构建和安装过程的详细信息,请参阅 Kernel HOWTO (www.tldp.org/HOWTO/Kernel-HOWTO.html)。
现在您的内核支持 IPv6,您已准备好安装 Apache 并在 IPv6 支持下运行它。首先,从 www.apache.org/dist/httpd 下载最新的 Apache 发行版到 /tmp。为了说明目的,我们使用 Apache 2.0.16;但是,相同的步骤适用于较新版本。解压源代码
cd /tmp tar xzvf httpd-2_0_16-beta.tar.gz
这将创建一个名为 httpd-2_0_16 的新目录,其中包含源代码。要为您的平台和特定要求配置 Apache,请使用发行版根目录中包含的 configure 脚本。您应该 cd 进入 httpd-2_0_16 目录并在 shell 提示符下键入 ./configure。如果您想知道可以传递给配置脚本的所有选项,请键入 ./configure --help。要更改默认选项,configure 脚本接受各种变量和命令行选项。其中一个选项是 Apache 的安装位置前缀。默认情况下,Apache 将安装到 /usr/local/apache。例如,如果您想将 Apache 安装到 /usr/local/apache-2_0_16,请键入
./configure --prefix=/usr/local/apache-2_0_16其他选项也适用。当运行 configure 时,它将花费几秒钟来测试系统上功能的可用性,并构建将用于编译服务器的 Makefiles。运行配置脚本后,您可以通过运行 make && make install 来构建构成 Apache 软件包的各个部分。这将编译 Apache 并将所有文件安装到 /usr/local/apache-2_0_16。下一步是通过编辑 /usr/local/apache-2_0_16/conf 下的 httpd.conf 文件或,如果您使用了不同的前缀,则在 prefix/conf/ 下的文件来定制 Apache HTTP 服务器
vi prefix/conf/httpd.conf
必须编辑的配置变量包括 ServerAdmin,您的电子邮件地址(以便在服务器出现问题时您会收到警报);ServerName,服务器的名称或 IP;以及 Port,服务器应监听的端口。httpd.conf 附带了很多解释,并且易于阅读、理解和自定义。但是,如果您需要有关配置指令的更多详细信息,您可以阅读 Apache 手册,可以在 Apache 安装目录中的 docs/manual/ 下本地阅读,也可以在 Web 上阅读,网址为 httpd.apache.org/docs。
现在您已经编译、安装和自定义了 Apache 配置。正如我们之前提到的,IPv6 支持现在已包含在 Apache 源代码中,因此您无需进行任何特殊配置即可激活它。要启动服务器,您可以使用 Apache 控制脚本,该脚本旨在允许使用简单的命令行界面来控制 Apache。使用它可以启动服务器、停止服务器、重新启动服务器、检查其状态并进行配置语法测试。因此,要启动服务器,您应该键入 apachectl start,然后您应该能够通过 http://ServerName 或 https:/// 请求文档。
随着 128 位寻址的出现,输入长 IP 地址的痛苦也随之而来。IPv6 地址的正确语法是八个字段,每个字段由四个十六进制字符组成,并用冒号分隔,总共 128 位。请注意,在 URL 中,端口号可以附加到地址后面,用冒号分隔,例如:149.76.14.14:80。由于 IPv6 地址已经在地址本身中使用了冒号,因此 IPv6 URL 中的地址用方括号括起来,冒号和端口附加在右方括号之后,例如:[3ffe:200:8:1000:250:bbff:fe00:25]:80。
并非所有 Web 浏览器都能够解析 IPv6 地址。Netscape Navigator 6.x 和 Mozilla 是经过测试的两个支持 IPv6 地址的浏览器。我们认为,虽然它们对 IPv6 的支持尚未成熟(因为它们有时会冻结并需要杀死浏览器进程或重新启动它),但它们都允许成功解析别名主机名。别名主机名是在 /etc/hosts 文件中分配给唯一 IP 地址的主机名。例如,我们可以通过编辑 /etc/hosts 来为 IPv6 地址定义别名,如下所示
::1 node02-v6-localhost 3ffe:200:8:1000:250:bbff:fe00:25 node02-v6
当我们启动 Netscape 或 Mozilla 时,我们在 URL 中键入定义的别名,并使用这些别名通过 IPv6 请求网页,例如 http://node2-v6/ 或 http://node2-v6-localhost/。
为了测试 Apache 的性能,我们按照上述步骤安装了支持 IPv6 的最新内核,并安装了 Apache 2.0.16。该机器是一台 1U Celeron 500MHz 机架式单元,具有 256MB 内存。它运行 Red Hat 7.0。至于基准测试,我们使用了 ApacheBench,这是一个 Apache Web 服务器免费提供的工具。
我们运行了两个测试:在 IPv4 上运行 Apache 2.0.16,然后在 IPv6 上运行 Apache 2.0.16。为了便于比较,我们在另一台具有相同设置的机器上运行了相同的测试,只是使用了 Apache 1.3.19,以便能够比较这两个版本中 IPv6 的性能和支持。为了在 Apache 1.3.19 中启用 IPv6,我们从 Kame Project 网站下载了 IPv6 Apache 补丁,并将其应用于 1.3.19 源代码树。接下来,我们运行了 configure 脚本
./configure --enable-rule=INET6
并启用了 INET6 选项。最后,我们执行了 make && make install,它编译并安装了带有来自 Kame 的 IPv6 支持的 Apache 1.3.19。
表 1 显示了基准测试的结果。每个基准测试都是在并发级别为 1 的情况下进行 1,000 次请求的结果。没有失败的请求或写入错误。
关于结果有几点说明。Apache 1.3.19 每秒能够处理的请求比 Apache 2.0.16 更多。在测试的 Apache 版本中,与 IPv4 相比,我们在 IPv6 中的每秒请求数更少;这可能是由于添加到 Apache 的 IPv6 代码尚未经过彻底测试和调试。另一方面,如果我们检查 Apache 1.3.19 的传输速率,我们会注意到它远高于 Apache 2.0.16 的传输速率。这仍然需要进一步调查。
在爱立信开放架构研究实验室,我们目前有一个基准测试环境来测试我们的 Linux 集群和应用服务器(包括 Apache、Tomcat 和 Jigsaw Web 服务器)的性能。但是,该环境和测试旨在与 IPv4 而不是 IPv6 一起使用。我们的计划是将环境移植到生成 IPv6 HTTP 请求,以便在重负载下测试 Apache(和其他 Web 服务器)在 IPv6 中的性能。我们目前共有 100 台 1U 机架式单元(混合了 Celeron 500 和 Pentium III 机器,具有 256MB 和 512MB 内存),这些单元很快将生成 IPv6 流量,并由一个节点收集和编译结果。我们将在工作完成后立即发布我们的结果。这将比为本文目的所做的初步测试更全面。
IPv6 正在成为现实。在完全过渡到 IPv6 之前,在未来几年内,我们需要能够在我们的应用服务器上同时支持 IPv4 和 IPv6。Apache 的开发人员意识到了这一点,他们已经在 Apache 代码中内置了对 IPv6 的支持。以前,对 IPv6 的支持是以可下载补丁(例如来自 Kame Project)的形式提供的,您可以将其应用于源代码树。
正如基准测试结果所示,通过 IPv6 提供文档比通过 IPv4 提供文档稍慢(就每秒请求数而言);但是,这是可以理解的,因为 IPv6 支持仍处于早期阶段。随着开发的推进,Apache 有望达到并超过其在 IPv4 中实现的性能水平,从而继续保持在全球首选 Web 服务器的地位。

