无法像在 Windows 上一样在 Mac 上启动 Apache

无法像在 Windows 上一样在 Mac 上启动 Apache

我要做的任务非常简单,因为我不是这个领域的专家,所以我请求帮助。

现在我正在尝试在我的 Mac 上运行 apache,我有 Windows 工作脚本,并且我需要在 Mac 上做同样的事情。

由于 Mac 开箱即用,我意识到我不需要下载它,就像在 Windows 机器上一样。

我在 Windows 机器上运行的脚本如下所示:

C:\dev\apache\Apache2\bin\httpd -f C:\dev\jboss-4.2.2.GA\server\myapp\httpd\conf\httpd.conf -D ssl
pause

基本上,要在我的 Mac 上启动 Apache,我只需执行以下操作:

sudo apachectl start

因此我假设 Windows 脚本基本上是使用来自 jboss 位置的 httpd.conf 启动 apache。

我想知道如何在我的 Mac 上执行相同操作,我已经有相同的 jboss-4.2.2.GA 文件夹。

我的第一个假设是,我可以手动编辑位于此处的默认 mac httpd.conf:/etc/apache2/httpd.conf,使用此文件:C:\dev\jboss-4.2.2.GA\server\myapp\httpd\conf\httpd.conf,但我有点困惑,因为我不知道如何处理这个 -D ssl。

如果有人能向我解释在 Mac 上处理这个问题的最佳方法是什么,我将不胜感激。

答案1

来自 Apache文档页面为了httpd

-D 参数

设置配置范围它可以与配置文件中的部分一起使用,<IfDefine>在服务器启动和重新启动时有条件地跳过或处理命令。还可以用于设置某些不太常见的启动参数,包括-DNO_DETACH(防止父级分叉)和-DFOREGROUND(防止父级调用setsid()等)。

来自 Apache文档页面为了<IfDefine>

部分用于标记条件指令。部分中的指令仅在以下情况下才会处理:<IfDefine test>...</IfDefine><IfDefine>测试是真的。如果测试为假,开始和结束标记之间的所有内容都会被忽略。

测试<IfDefine>section 指令中,可以采用以下两种形式之一:

  • 參數名
  • !参数名称

在前一种情况下,仅当名为的参数參數名已定义。第二种格式反转测试,并且只在以下情况下处理指令:參數名不是已定义。

參數名参数是在服务器启动时httpd通过命令行或指令给出的定义。-DparameterDefine


简而言之,这意味着对于您的 Windows 启动脚本,该参数-D ssl定义了一个名为安全套接字,它启用 httpd.conf 中由<IfDefine ssl>部分括起来的任何选项。

但是,对于您使用的 macOS 启动命令apachectl start,它不支持传递其他参数,例如-D。因此安全套接字范围不能运行该命令时进行设置。

这意味着在您的 Mac 上,httpd.conf 中任何被部分括起来的选项<IfDefine ssl>都不会启用。如果您已复制 Windows httpd.conf 文件,那么可以安全地假设启用 SSL 的选项将因此被禁用。


解决方案是浏览 Windows httpd.conf 并搜索字符串<IfDefine ssl>。您需要注释掉该字符串及其对应的字符串</IfDefine>。它可能会出现多次。这将确保该部分中包含的选项始终处于启用状态,因为我假设您希望每次启动 Apache 时都启用 SSL。

您还可能会找到带有 的部分<IfDefine !ssl>。在 Windows 上,这些部分将是已禁用当启动命令带有参数时-D ssl。但是,在 Mac-D ssl不是被传递,这意味着这些部分将被打开,即使我们不希望它们被打开。注释掉整个部分,因为我们不希望它被运行。

您应该从如下所示的 httpd.conf 开始:

...
<IfDefine ssl>
    OptionOne yes
    OptionTwo no
    <Subsection>
        OptionThree yes
    </Subsection>
</IfDefine>

<IfDefine !ssl>
    OptionOne no
    OptionTwo yes
</IfDefine>
...

最后得到如下结果:

...
#<IfDefine ssl>
    OptionOne yes
    OptionTwo no
    <Subsection>
        OptionThree yes
    </Subsection>
#</IfDefine>

#<IfDefine !ssl>
#    OptionOne no
#    OptionTwo yes
#</IfDefine>
...

然后您可以将 Windows httpd.conf 复制到 Mac 的 httpd.conf。请务必保留原件的副本!现在运行的sudo apachectl start功能与 Windows 命令相同。

相关内容