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

klh5stk1  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(315)

当我尝试使用相对路径时,Apache服务器服务找不到模块文件。
问题的实质是我的项目有一个Apache服务子文件夹,并且Apache服务需要能够从任何位置运行,而不管用户决定将程序安装在哪里。
在项目中可以找到Apache文件的文件如下:

  • Apache根目录:[附件目录]/Apache 2.4
  • 服务文件(xxx.exe):[APPDIR]/Apache2.4/二进制文件

现在,如何在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中记录“Test”,所以显然我遗漏了一些其他的东西。
如果我有这么多工作要做,我的下一步将是设法让Apache向我返回它试图使用的ServerRoot目录的绝对路径,然后相应地修改该值,直到我有一个解决方案,其中相对路径总是指向安装目录。

7z5jn7bk

7z5jn7bk1#

好的,经过大量的试验和错误,我找到了一个有效的配置:
将ServerRoot配置为使用相对路径的一种方法是根本不设置ServerRoot
这显然会导致Apache将服务器根目录默认为启动服务器文件的目录的第一个根目录。
例如,我从以下位置启动服务:

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

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

fv2wmkja

fv2wmkja2#

如果从批处理文件运行httpd.exe,还可以使用环境变量。
D:\Unexpected Folder\Totally Unexpected Folder\run.bat

set APACHE_SERVER_ROOT=%cd%\apache-2.4
%APACHE_SERVER_ROOT%\bin\httpd.exe

D:\Unexpected Folder\Totally Unexpected Folder\apache-2.4\conf\httpd.conf

# ...

Define SRVROOT "${APACHE_SERVER_ROOT}"

ServerRoot "${SRVROOT}"

# ...

相关问题