Apache~为相对路径配置服务器根目录

时间:2017-11-24 10:45:21

标签: apache logging path relative

当我尝试使用相对路径时,我遇到了Apache Server服务无法找到模块文件的问题。

问题的实质是我的项目有一个Apache服务子文件夹,无论用户决定安装程序的位置如何,都需要能够运行Apache服务。

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

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

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

我目前的设置是:

 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中记录“Test”,所以显然还有其他我不知道的东西。

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

无论如何,对此的任何帮助将不胜感激。

提前致谢, Kira Resari

1 个答案:

答案 0 :(得分:0)

好的,经过大量的反复试验后,我发现了一个有效的配置:

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

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

例如,我从以下地址开始提供服务:

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

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