版权:
Published on The O'Reilly Network (http://www.oreillynet.com/)
http://www.oreillynet.com/pub/a/apache/2001/04/26/apache_2.html
See this if you're having trouble printing code examples
原作者:Ryan Bloom 是 2.0 的核心开发成员,Apache Portable Run-time project 的付总裁,应 O'Reilly 的邀请,他写了一个 2.0 的专栏,本文是这个专栏六篇文章中的第一篇。
Apache 开发人员已经在 2.0 上工作了两年了,2001年4月5日,Apache 2.0 的第一个 beta 版本诞生了。
2001年3月28日,Apache 2.0.15 作为 alpha 版本发布,从 2.0.14 开始,Apache 开发小组改变了版本号策略。在以前的版本中,版本号总是先有 alpha 和 beta 然后开始就是 1.x.x 的正式版本。而新的版本策略则总是从 alpha 开始,一旦使用,则升级到 beta 或者 GA 质量,对于用户而言,今天下载的一个 alpha 版本,明天就可能已经是 beta 了。
Apache 2.0 最重要的修改就是增加了多线程支持,1.3 版本依赖于进程来处理请求,这对于操作系统而言有很大的压力,线程结合进程的办法使 2.0 具有更高的伸缩性。
第二个主要的优点就是对输入/输出的过滤,一个模块能修改另外一个模块的输出,1.3 版本中经常有人要求 CGI 脚本输出 SSI 标签 (tags),但是在 2.0 里,这个要求就能实现了。
Apache 2.0 支持 SSL 而不需要修改内核,已经包含一个 mod_tls ,是 SSL 的一个雏形,会在以后的提供完整的 SSL 支持。
使用 Apache 2.0 的第一个障碍就是配置和安装。有两种方式的配置:
compile-time 和 run-time,本文着眼于取得 tarball,编译,然后安装。
首先下载 Apache 2.0,建议从官方网站下载,如果需要最新版本可以去下载 CVS。
本文假设你使用 Apache 2.0.15,解开压缩:
tar -xvzf httpd-2*.tar.gz
Apache 2.0 采用 autoconf 和 libtool 决定要编译的部件,一般下载后的 tarball 文件已经包含用于配置的 configure 脚本,如果你想要自己生成则可以使用 ./buildconf 命令重新建立。
configure 脚本有很多的选项,要看详细的列表可以使用如下命令:
./configure --help
这里介绍几个主要的选项:
--prefix 指定 Apache 安装的目标目录。
--with-maintainer-mode 以完全的纠错方式编译。
--with-mpm 指定多处理模块
--enable-module 指定哪些模块可以编译进 Apache,可以是模块列表,也可以是关键字 most。能把一个模块列表中的所有模块都编译进去。
--enable-mods-shared 指定哪些模块应该被编译为共享模块。
多处理模块 (MPM) 能让您对任意站点的 Apache 2.0 做调整。一个网站或者操作系统上的配置在另外一台机器或者操作系统上可能会有炯然不同的结果,为了解决这个问题,系统管理员可以指定 Apache 服务器的运行方式,例如在 Unix 上有三种标准的 MPM:
Prefork -- 和 Apache 1.3 同样的模块,父进程派生一些子进程处理请求,每个子进程有一个线程,同一时间只能处理一个请求,当服务器忙时,它派生新的子进程。
Threaded -- 和 Prefork 相同,但是每个子进程拥有静态数目的线程,具体的数目在 httpd.conf 中指定。
Perchild -- 父进程创建指定数目的子进程,每个子进程带有最小数目的线程,当服务器忙时,进程创建更多的线程来处理请求。
对 Windows 操作系统而言,只有一种:
Winnt -- 和 Apache 1.3 类似,有两个进程,父进程负责监视子进程,保证有进程存在能处理请求。
一旦 configure 完成,我们就可以 make 了,如果顺利的话,最后一步就是安装:make install。如果你在前面的 configure 中没有指定 --prefix 参数,那么 Apache 缺省的安装目录就是 /usr/local/apache。
如果你是以 root 用户安装的 Apache ,那么直接在浏览器上输入 http://localhost 就可以看到一个 Apache 的测试页面了。如果不是以 root 安装 Apache 的话,Apache 的缺省端口为 8080 ,因此,浏览的地址应该为: http://localhost:8080/。如果没有看到的话,请查看错误日志。
版权:
Published on The O'Reilly Network (http://www.oreillynet.com/)
http://www.oreillynet.com/pub/a/apache/2001/06/19/apache_2.html
See this if you're having trouble printing code examples
上一篇我们谈到了 2.0 的安装,但是对于大多数用来说,应该是从 1.3 的升级,因此,本文将探讨 apache.org 的升级过程,就其中的疑难问题给与解释。
Apache.org 虽然不能算十分繁忙的网站,但是也不能因为升级让你停止服务,所以我们采用的策略是在另外一个端口 8091 上先测试一个星期,如果正常着切换到 80 端口。
我们首先要决定的是采用那个 MPM ,建议首先使用 prefork 的 MPM ,如果 Apache 能正常跑起来,就可以考虑采用其他的 MPM 。
MPM 对服务器的影响不仅仅限于进程和线程之间的关系,很多版本的 Unix 不能很好的派生线程,他们把进程和所有线程做一个拷贝,然后杀掉所有线程,只剩下一个,所以这样并不是一个高效的办法。
Apache 的处理办法是,由一个 CGI 守护程序处理新创建的 CGI 进程,这个守护程序在所有子进程创建前生成,是一个单线程的进程,当收到一个 CGI 请求时, Apache 把它发给 CGI 守护程序,然后守护程序派生一个 CGI 进程,该进程响应用户的请求。这个模块没有标准的 mod_cgi 那么先进,但是如果你的threaded 方式的 MPM 处理 CGI 请求有问题的话,可以采用 mod_cgi 来“降格以求”,尽管在性能上会有所下降。
Apache 1.3 和 2.0 最大的区别就在于过滤器,唯一实现了过滤器的标准模块是 mod_include,在 1.3 中,如果要处理 .shtml 文件,那么必须加入一行:
AddHandler server-parsed .shtml
但是在 2.0 中,没有服务器解析的处理器了,你要修改为如下:
SetOutputFilter INCLUDES
这句话可以加在 Files, Directory, 或者 Location 里面,这意味着配置文件会越来越大并且越来越难读,同样,这也意味着 mime 类型不再像他们在以前的 Apache 里面那么重要了,而 Handlers 也风光不再。大多数模块都采用缺省的 handler 来从磁盘上读入文件,然后使用过滤器修改数据。
[原文中提到了 IPv6 问题,这里不再翻译]