Apache - 包含与 ServerConfigFile 相关的 conf 文件 (-f arg)

Apache - 包含与 ServerConfigFile 相关的 conf 文件 (-f arg)

我想使用-fApache 服务器的命令行选项,以便可以存储会议文件放在与服务器二进制文件不同的位置(数据目录)。

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

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

有谁知道让 Include 指令相对于 Apache 传递的 conf 文件工作的方法吗?我试过了Include "./addons/SVN.conf",但那也是相对于 ServerRoot 的。这种强制相对于 ServerRoot 的 Include 行为有点违背了指定 ServerRoot/conf 中配置文件的替代配置文件的整个目的。

谢谢。

答案1

好的,我明白了(谢谢约斯基建议改变服务器根目录,这是解决方案的一部分)。


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

  Y:\Servers\HTTP\Apache   - 二进制文件
  X:\Docs\Settings\Apache  - 配置文件

所以我做的是:

  1. 我将conflogs目录从二进制目录移到了文档目录…Settings\Apache\confhttpd配置文件几乎等同于httpd.conf.默认。它有以下条目:

      ServerRoot "Y:\Servers\HTTP\Apache"  #像平常一样

  2. 然后在文件底部我添加了

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

  3. 下一步就是编辑我的几个包括-ed .conf 文件使用加载模块,并传递.so 文件的完整路径。

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

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

    (不幸的是,第二个 Include 必须使用设置目录的绝对路径,因此这会有点违背目的。)

  4. 最后,我设置 Apache 来加载httpd配置文件从我的 docs 目录中下载文件(即 load X:\Docs\Settings\Apache\httpd.conf)。有几种方法可以做到这一点。安装程序使用配置参数Apache 服务的注册表项,但我决定不使用它,并将其清空。我尝试设置HKLM\SOFTWARE\Apache 软件基金会\Apache\2.2.15\ServerRootX:\Docs\Settings\Apache但 Apache 似乎没有识别到​​。我决定使用命令行。我修改了我的安装.bat这样当它创建 Apache 服务时,它会传递httpd配置文件使用-f参数的文件(编辑批处理文件比修改注册表中的多字符串更容易/更快)。

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

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


(哦,日志在其他地方,例如X:\Docs\Logs\Apache。日志相关的条目在httpd配置文件使用绝对路径,但如果我要更改日志目录,只需在文件中搜索并替换即可更新,就像使用绝对路径一样加载模块如果我改变了二进制文件的位置,我的自定义 .conf 文件中的指令。)

答案2

只需设定服务器根目录到您需要的目录或使用-d命令行参数。该ServerRoot指令不必指向包含 Apache httpd 的二进制文件和库的目录。

相关内容