ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 从1.3升级到2.0 为了帮助大伙儿升级,我们为现在的Apache用户提供了一份重要信息的文档说明。这些只是一些简要说明,你可以从[新特性](#calibre_link-234)文档或`src/CHANGES`文件中得到更多信息。 ## 编译时配置的改变 * Apache现在使用autoconf和libtool系统来进行安装进程的配置。这个系统用起来很像Apache1.3的APACI系统,但并不相同。 * 在普通的选择编译模块的基础上,Apache2.0把请求进程的主要部分移到了多路处理模块(MPM)里。 ## 运行时配置的改变 * Apache1.3服务器核心中的很多指令现在都放到了MPM里面。如果你希望服务器的行为能够尽量的类似于Apache1.3 ,你应当选择`prefork`MPM。其他的MPM将拥有不同的指令来控制进程创建和请求过程。 * [proxy module](#calibre_link-121)已经被修补以兼容HTTP/1.1。其中重要的改变之一是:代理的访问控制现在是放在`<Proxy>`段而不是`<Directory proxy:>`段里面了。 * 许多模块中`PATH_INFO` (在真实文件名后附加路径信息)的处理有了变化。以前作为处理器而现在作为过滤器出现的模块现在可能不再接受包含`PATH_INFO`的请求。诸如[INCLUDES](#calibre_link-237)或[PHP](http://www.php.net/)过滤器将在处理核心的最顶层得到实现,从而拒绝包含`PATH_INFO`的请求。你可以用`AcceptPathInfo`指令来迫使处理核心接受包含`PATH_INFO`的请求,从而恢复服务器端包含中使用`PATH_INFO`的能力。 * `CacheNegotiatedDocs`指令现在使用 On 或 Off 参数了。原有的`CacheNegotiatedDocs`应该代之以`CacheNegotiatedDocs on` * `ErrorDocument`指令不再用引号开始的参数来指定文本内容了。取而代之的是用双引号把文本内容括起来。比如原有的配置: ``` ErrorDocument 403 "Some Message ``` 应该代之以: ``` ErrorDocument 403 "Some Message" ``` 只要第二个参数不是有效的URL或路径名,它就会被当作是一个文本信息。 * `AccessConfig`和 `ResourceConfig`指令不复存在了。现有的这些指令可以用`Include`指令代替以实现相同的功能。如果你使用的是这些指令的默认值而没有把它们放到配置文件里的话,你可能需要把"`Include conf/access.conf`"和"`Include conf/srm.conf`"加到你的`httpd.conf`里。为了确保Apache用象以前一样的顺序读取这些配置文件,应该把`Include`指令放到`httpd.conf`的结束部分,并将包含`srm.conf`的语句放在包含`access.conf`的语句的前面。 * `BindAddress`和`Port`指令不再存在了。相同的功能由更加灵活的`Listen`指令提供。 * Apache1.3中`Port`指令的另一功能是设定自引用的URL的端口。Apache2.0中对等的是新的`ServerName`语法:它已经被修改成在一条指令里同时为自引用的URL指定服务器名和端口号。 * `ServerType`指令不复存在了。用于伺服请求的方法现在取决于MPM的选择。目前还没有设计出用于被inetd(端口监视程序)载入的MPM。 * `mod_log_agent`和`mod_log_referer`被去掉了。取代以使用`CustomLog`指令的`mod_log_config`模块。 * `AddModule`和`ClearModuleList`指令不复存在了。这些指令原用于确定模块以正确的顺序被激活。而新的Apache2.0 API允许模块明确的指定它们的顺序,从而这些指令就不再有存在的必要了。 * `FancyIndexing`指令被去掉了,取而代之的是`IndexOptions`指令的`FancyIndexing`选项。 * 由模块`mod_negotiation`提供的MultiViews内容协商机制在其默认文件匹配方面变得更加严格了,只匹配允许协商的文件。可以用`MultiviewsMatch` 指令恢复到原来的匹配模式。 * (_2.0.51以后_) `ErrorHeader`指令的功能合并到`Header`指令中去了。因为原来的是一个谬误。应当使用: ``` Header always set foo bar ``` 代替原来的使用方式。 ## 杂项的改变 * Apache1.3中的实验模块`mod_auth_digest`现在是基本模块了。 * Apache1.3中的实验模块`mod_mmap_static`现在被`mod_file_cache`代替了。 * 发行包经过了重新组织,从而不再包含一个独立的src目录。取而代之的是将源代码有逻辑的组织在发行包的主目录下面。编译后的服务器的安装将从各自的目录下进行。 ## 第三方模块 Apache2.0中的服务器API有了巨大的变化。现有的为Apache1.3设计的模块未经修改将**不能**运行在Apache2.0上。详情请参见[开发者文档](#calibre_link-116)。