Apache – 包含相对于ServerConfigFile的conf文件(-f arg)

我想为Apache服务器使用-f命令行选项,以便我可以将conf文件存储在服务器二进制文件的单独位置(数据模块)。

问题是我使用Include指令来分离和组织configuration,但是当我使用Include "addons/SVN.conf"的命令时,它失败了,因为Apache在ServerRoot目录中查找相对于ServerRoot目录的addons / SVN.conf ServerConfigFile目录。

我可以通过使用绝对path(例如Include "e:\foo\bar\baz\Apache\conf\addons\svn.conf" ,但是我不喜欢这样做,因为这意味着我将不得不更改每个如果我移动conf文件夹,而不是简单地改变-f选项,那么每个包含指令。

有没有人知道一种方法来获得包含指令工作相对于Apache传递的conf文件。 我试过Include "./addons/SVN.conf" ,但这也是相对于ServerRoot。 这种强制的相对于ServerRoot包含行为的种类会破坏将指定备用configuration文件指定给ServerRoot / conf中的一个的全部目的。

谢谢。

只需将ServerRoot设置为您需要的目录或使用-d命令行参数即可。 ServerRoot指令不必指向包含Apache httpd的二进制文件和库的目录。

好吧,我明白了(感谢乔希build议更改ServerRoot ,这是解决scheme的一部分)。

我有两个Apache相关的位置,例如:

Y:\Servers\HTTP\Apache – 二进制文件
X:\Docs\Settings\Apache – configuration文件

所以我做的是:

  1. 我将conflogs目录从二进制文件目录移到了docs目录。 在…Settings\Apache\confhttpd.conf ,它几乎与httpd.conf.default相同。 它有以下条目:

    ServerRoot "Y:\Servers\HTTP\Apache" #正常

  2. 然后在文件底部,我补充道

    ServerRoot "X:\Docs\Settings\Apache" – 更改ServerRoot
    Include "conf/Includes.conf" – 包括自定义

  3. 下一步就是编辑几个使用LoadModule的 includ -ed .conf文件,并将完整path传递给.so文件。

    如果我在自定义的.conf文件中有大量的LoadModule调用,而不是使用绝对path,我会做的是创build两个新的.conf文件(如BinLoc.confConfLoc.conf ),每个文件都包含一个ServerRoot指令将其设置为二进制文件目录。 然后我可以包装LoadModule调用,如下所示:

    Include "conf/BinLoc.conf"
    LoadModule ssl_module modules/mod_ssl.so
    Include "conf/ConfLoc.conf"

    (不幸的是,第二个包括必须使用设置目录的绝对path,所以它会失败的目的。)

  4. 最后,我将Apache设置为从我的docs目录加载httpd.conf文件(即加载X:\Docs\Settings\Apache\httpd.conf )。 有几种方法可以做到这一点。 安装程序使用Apache服务的ConfigArgsregistry项,但是我决定不使用它并清空它。 我尝试将HKLM \ SOFTWARE \ Apache Software Foundation \ Apache \ 2.2.15 \ ServerRoot设置X:\Docs\Settings\Apache ,但是Apache似乎没有select它。 我决定走命令行。 我修改了Install.bat,以便在创buildApache服务时,它使用-fparameter passinghttpd.conf文件(编辑batch file比在registry中修改多string更容易/更快)。

事实上,我之前已经使用-f传递了.conf文件,所以最终只需要更改(除了将文件夹移动到我的文档目录之外)就是向httpd.conf添加一个额外的ServerRoot指令来重置configuration目录,并在我的非默认(即自定义).conf文件中更改一些LoadModule指令以使用绝对path(尽pipe如果有很多这样的path,我可以将其设置回二进制文件。

Apache现在运行得很好,(可replace的)二进制文件和(不可替代的)configuration文件很好,是分开的。 :)

(哦,并且日志在其他地方,例如X:\Docs\Logs\Apache的日志相关条目使用绝对path,但是我应该更改日志目录,这是一个简单的search问题如果我更改了二进制文件的位置,就像在自定义的.conf文件中的LoadModule指令的绝对path一样。