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

Syn*_*ech 5 configuration paths apache-2.2

我想对-fApache 服务器使用命令行选项,以便我可以将conf文件存储在与服务器二进制文件不同的地方(数据目录)。

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

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

有谁知道让 Include 指令相对于 Apache 传递的 conf 文件起作用的方法。我试过了Include "./addons/SVN.conf",但这也是相对于 ServerRoot 而言的。这种强制的相对于 ServerRoot Include 的行为违背了将备用配置文件指定为 ServerRoot/conf 中的配置文件的全部目的。

谢谢。

Syn*_*ech 2

好的,我想通了(感谢joschi建议更改ServerRoot,这是解决方案的一部分)。 \n


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

\n\n

\xc2\xa0\xc2\xa0Y:\\Servers\\HTTP\\Apache\xc2\xa0\xc2\xa0\xc2\xa0- 二进制文件
\n \xc2\xa0\xc2\xa0X:\\Docs\\Settings\\Apache\xc2\xa0\xc2\xa0- 配置文件\n

\n\n

所以我所做的是:

\n\n
    \n
  1. 我将conflogs目录从 binaries 目录移至 docs 目录。其中\xe2\x80\xa6Settings\\Apache\\confhttpd.conf,它与httpd.conf.default几乎相同。它有以下条目:

    \n\n

    \xc2\xa0\xc2\xa0ServerRoot "Y:\\Servers\\HTTP\\Apache"\xc2\xa0\xc2\xa0#正常\n

  2. \n
  3. 然后在文件的底部,我添加了

    \n\n

    \xc2\xa0\xc2\xa0ServerRoot "X:\\Docs\\Settings\\Apache"\xc2\xa0\xc2\xa0- 更改 ServerRoot
    \n \xc2\xa0\xc2\xa0Include "conf/Includes.conf"\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0- 包括自定义项\n

  4. \n
  5. 下一步只是编辑几个使用LoadModule的Include编辑的 .conf 文件,并将完整路径传递给 .so 文件。

    \n\n

    如果我的自定义 .conf 文件中有很多 LoadModule 调用,我会做的是创建两个新的 .conf 文件(例如BinLoc.confConfLoc.conf),每个文件包含一个ServerRoot指令,而不是使用绝对路径将其设置为 binary/docs 目录。然后我可以将 LoadModule 调用包装如下:

    \n\n

    \xc2\xa0\xc2\xa0Include "conf/BinLoc.conf"\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0
    \n \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0LoadModule ssl_module modules/mod_ssl.so\xc2\xa0\xc2\xa0
    \n\xc2\xa0\xc2\xa0Include "conf/ConfLoc.conf"\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0

    \n\n

    (不幸的是,第二个包含必须使用设置目录的绝对路径,因此这会达不到目的。)\n

  6. \n
  7. 最后,我设置 Apache 从我的 docs 目录加载httpd.conf文件(即 load X:\\Docs\\Settings\\Apache\\httpd.conf)。有几种方法可以做到这一点。安装程序使用Apache 服务的ConfigArgs注册表项,但我决定不使用它并将其清空。我尝试将HKLM\\SOFTWARE\\Apache Software Foundation\\Apache\\2.2.15\\ServerRoot设置为X:\\Docs\\Settings\\Apache,但 Apache 似乎没有\xe2\x80\x99t 接受它。我决定使用命令行。我修改了Install.bat,以便在创建 Apache 服务时,它使用参数传递httpd.conf-f文件(编辑批处理文件比修改注册表中的多字符串更容易/更快)。\n

  8. \n
\n\n

事实上,我已经使用之前传递了 .conf 文件-f,因此最终所需的唯一更改(除了将文件夹移动到我的 docs 目录之外)是向httpd.conf添加额外的ServerRoot指令以重置配置目录并更改我的非默认(即自定义).conf 文件中的几个 LoadModule 指令以使用绝对路径(尽管如果有很多路径,我可以将其设置回二进制 .\n

\n\n

Apache 现在运行得很好,(可替换的)二进制文件和(不可替换的)配置文件很好并且是独立的。:)\n


\n\n

(哦,日志在其他地方,例如。httpd.confX:\\Docs\\Logs\\Apache中与日志相关的条目使用绝对路径,但如果我更改日志目录,它\xe2\x80\x99s 是一个简单的搜索和操作问题-replace-in-files 进行更新,就像我更改二进制文件的位置时自定义 .conf 文件中LoadModule指令的绝对路径一样。)

\n