【问题标题】:Apache ~ Configuring Server Root for Relative PathsApache ~ 为相对路径配置服务器根目录
【发布时间】:2018-05-08 08:50:51
【问题描述】:

当我尝试使用相对路径时,Apache 服务器服务找不到模块文件时遇到问题。

问题的本质是我的项目有一个 Apache 服务子文件夹,并且无论用户决定在哪里安装程序,Apache 服务都需要能够运行。

项目中可以找到Apache文件的文件如下:

  • Apache 根目录:[APPDIR]/Apache2.4
  • 服务文件 (xxx.exe):[APPDIR]/Apache2.4/bin

现在,如何配置 httpd.conf 中的 ServerRoot 以识别正确的根目录?

我目前的设置是:

 ServerRoot ".."

这在直接运行 xxx.exe 时可以正常工作。但是,尝试将其安装为服务时会失败。我认为这是因为该服务不直接运行 xxx.exe,而是从另一个目录执行它,所以 ServerRoot ".." 自然不再工作了。这在应用程序日志中产生的错误消息是:

 >>> xxx.exe: Syntax error on line 81 of C:/Release Static/Apache2.4/conf/httpd.conf: Cannot load modules/mod_access_compat.so into server: The specified module could not be found.     .

我解决此问题的第一种方法是尝试记录 Apache 尝试查找文件的确切路径。为此,我尝试通过在 httpd.conf 中导致错误的行之前编写 LogMessage 指令,让 Apache 在错误日志中记录一些内容。但是,我什至无法记录测试消息这样简单的内容。我尝试使用的代码是:

 LoadModule log_config_module "C:/Release Static/Apache2.4/modules/mod_log_config.so"
 LoadModule log_debug_module "C:/Release Static/Apache2.4/modules/mod_log_debug.so"
 ErrorLog "C:/Release Static/Apache2.4/logs/error.log"
 LogLevel debug rewrite:trace8
 LogMessage "Test"

这显然有效,因为该错误仅在稍后尝试加载具有相对路径的模块时才继续发生。但是,它也没有在 error.log 中记录“测试”,所以我显然还缺少其他东西。

如果我有这么多工作,我下一步将尝试找出一种方法,让 Apache 将它尝试使用的 ServerRoot 目录的绝对路径返回给我,然后相应地修改该值,直到我找到解决方案其中相对路径始终指向安装目录。

【问题讨论】:

    标签: apache logging path relative-path


    【解决方案1】:

    好的,经过反复试验,我发现了一个可行的配置:

    将 ServerRoot 配置为使用相对路径的一种方法是根本不设置 ServerRoot

    这显然会导致 Apache 将服务器根默认设置为您启动服务器文件的目录的第一个根。

    例如,我从以下位置启动服务:

    D:\Unexpected Folder\Totally Unexpected Folder\NBL\Apache2.4\bin
    

    ...它成功找到了NBL\Apache2.4\modules文件夹中的所有模块,并开始在NBL\Apache2.4\logs文件夹中写入日志文件。

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2017-03-24
      相关资源
      最近更新 更多