自由的BSD操作系统中Apache的配置文件的变化

当我升级子版本控制系统时,pkg audit,导致mod_dav_svn无法加载到apache上,并且apache无法启动。现在我需要了解原因并采取相应措施。

环境

    • FreeBSD 9(10でも同じはず)

 

    • apache22 2.2.29_2

 

    subversion 1.8.13

现象

当尝试启动Apache时,会出现以下错误。

Performing sanity check on apache22 configuration:
Syntax error on line 309 of /usr/local/etc/apache22/ssl.conf:
Unknown DAV provider: svn

由于似乎加载了mod_dav_svn,因此将LoadModule添加到httpd.conf后,以下错误发生了变化。

Performing sanity check on apache22 configuration:
Syntax error on line 312 of /usr/local/etc/apache22/ssl.conf:
Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration

出现原因

在 /usr/local/etc/apache22/modules.d 这个目录下,出现了两个文件,分别是 220_subversion.conf 和 220_subversion.conf.sample。

我查看了它们的内容,里面写着与 mod_dav_svn 相关的 LoadModule 和设置的示例(但都被注释掉了)。

然而,从 httpd.conf 文件中并没有读取这个文件。

我在另一台安装了 apache24 而不是 apache22 的主机上进行了检查,找到了以下行,它们出现在 LoadModule 的后面。

# Third party modules
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf

嗨,看起来现在不仅读取位于 /usr/local/etc/apacheXX/Includes 的文件,还开始读取 /usr/local/etc/apacheXX/modules.d 中的文件。

我认为这个话题应该在/usr/ports/UPDATING中进行讨论,但我只找到了以下相关内容。

20140713:
  AFFECTS: users of www/apache22
  AUTHOR: ohauer@FreeBSD.org

  The default version was changed from www/apache22 to www/apache24,
  pre-build apache modules and web applications will also reflect this!

  In case ports are build by yourself and apache22 is required
  use the following command to keep apache22 as default.

  # echo "DEFAULT_VERSIONS+=apache=2.2" >> /etc/make.conf

我没有修改make.conf文件,但那可能是原因吗?

应对措施 duì cuò shī)

如果将之前的apache24配置添加到apache22的httpd.conf中,将会出现以下错误。

Performing sanity check on apache22 configuration:
Syntax error on line 302 of /usr/local/etc/apache22/httpd.conf:
Invalid command 'IncludeOptional', perhaps misspelled or defined by a module not included in the server configuration

根据调查,看起来 IncludeOptional 是从 Apache 2.3.6 版本后引入的,所以将其修正为 Include。

# Third party modules
Include etc/apache22/modules.d/[0-9][0-9][0-9]_*.conf

顺便提一下,Include和IncludeOptional之间的区别是,如果没有与通配符匹配的文件,则IncludeOptional不会报错。由于我们知道文件是存在的,所以在这种情况下使用Include就没问题。

接下来,需要取消modules.d文件中的注释,并启用LoadModule。

LoadModule dav_svn_module     libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache22/mod_authz_svn.so
LoadModule dontdothat_module  libexec/apache22/mod_dontdothat.so

快点升级到Apache 2.4吧……

广告
将在 10 秒后关闭
bannerAds