从1.3升级到2.0

为了帮助大伙儿升级,我们为现在的Apache用户提供了一份重要信息的文档说明。这些只是一些简要说明,你可以从新特性文档或src/CHANGES文件中得到更多信息。

编译时配置的改变

  • Apache现在使用autoconf和libtool系统来进行安装进程的配置。这个系统用起来很像Apache1.3的APACI系统,但并不相同。
  • 在普通的选择编译模块的基础上,Apache2.0把请求进程的主要部分移到了多路处理模块(MPM)里。

运行时配置的改变

  • Apache1.3服务器核心中的很多指令现在都放到了MPM里面。如果你希望服务器的行为能够尽量的类似于Apache1.3 ,你应当选择preforkMPM。其他的MPM将拥有不同的指令来控制进程创建和请求过程。
  • proxy module已经被修补以兼容HTTP/1.1。其中重要的改变之一是:代理的访问控制现在是放在<Proxy>段而不是<Directory proxy:>段里面了。
  • 许多模块中PATH_INFO (在真实文件名后附加路径信息)的处理有了变化。以前作为处理器而现在作为过滤器出现的模块现在可能不再接受包含PATH_INFO的请求。诸如INCLUDESPHP过滤器将在处理核心的最顶层得到实现,从而拒绝包含PATH_INFO的请求。你可以用AcceptPathInfo指令来迫使处理核心接受包含PATH_INFO的请求,从而恢复服务器端包含中使用PATH_INFO的能力。
  • CacheNegotiatedDocs指令现在使用 On 或 Off 参数了。原有的CacheNegotiatedDocs应该代之以CacheNegotiatedDocs on
  • ErrorDocument指令不再用引号开始的参数来指定文本内容了。取而代之的是用双引号把文本内容括起来。比如原有的配置:

              ErrorDocument 403 "Some Message
    

    应该代之以:

              ErrorDocument 403 "Some Message"
    

    只要第二个参数不是有效的URL或路径名,它就会被当作是一个文本信息。

  • AccessConfigResourceConfig指令不复存在了。现有的这些指令可以用Include指令代替以实现相同的功能。如果你使用的是这些指令的默认值而没有把它们放到配置文件里的话,你可能需要把"Include conf/access.conf"和"Include conf/srm.conf"加到你的httpd.conf里。为了确保Apache用象以前一样的顺序读取这些配置文件,应该把Include指令放到httpd.conf的结束部分,并将包含srm.conf的语句放在包含access.conf的语句的前面。
  • BindAddressPort指令不再存在了。相同的功能由更加灵活的Listen指令提供。
  • Apache1.3中Port指令的另一功能是设定自引用的URL的端口。Apache2.0中对等的是新的ServerName语法:它已经被修改成在一条指令里同时为自引用的URL指定服务器名和端口号。
  • ServerType指令不复存在了。用于伺服请求的方法现在取决于MPM的选择。目前还没有设计出用于被inetd(端口监视程序)载入的MPM。
  • mod_log_agentmod_log_referer被去掉了。取代以使用CustomLog指令的mod_log_config模块。
  • AddModuleClearModuleList指令不复存在了。这些指令原用于确定模块以正确的顺序被激活。而新的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上。详情请参见开发者文档