更新到High Sierra后Apache2(Httpd)无法正常工作


15

我有一个问题,Apache更新到High Sierra 10.13.1后将无法启动。错误日志中没有显示任何内容,但是当我尝试不执行apachectl start任何操作时。如果我运行,apachectl configtest我会收到“语法正确

我曾经使用过类似的命令sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist,但无济于事。Apache将无法启动。我可以跑步sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plist,但也不起作用。

我看了看brew服务列表,httpd和其他进程(mysql)一起显示在列表中,但是httpd的状态显示为黄色的“已启动”,而不是绿色的。

我尝试了许多不同的事情,发现的是,如果我查看system.log文件,将会发现 com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

如果我运行apachectl start,该命令似乎可以运行,但是当我运行stop命令时,我得到“ httpd(无pid文件)未运行。
我还收到com。; apple.xpc.launchd [1]的输出org.apache.httpd):请从OnDemand切换到KeepAlive。

当Sierra在Sierra中运行良好时,High Sierra是否有某些因素阻止Apache运行?


1
您正在混合brew的Apache httpd和Apple的Apache httpd(其启动守护进程启动不同的二进制文件)!您从何处获得httpd状态(即黄色与绿色指示符)?您使用了哪个初始设置指南?
klanomath

我没有混合使用它们,我正在尝试同时使用Brew和Apple的Apache,当我执行brew services list' I receive a yellow indicator, I checked with all of the available users and ran Brew服务列表时,它们都显示相同的指示符。至于安装指南,则使用Ansible来安装apache。这是在其他5台MacBook上完成的,它们仍在运行Sierra。这台MacBook出现问题,苹果电脑运行了诊断程序并重置了操作系统,同时将操作系统更新为High Sierra
Alcyeonnero

混合是指:您至少安装了两个apachectl和httpd二进制文件(以及两个配置文件)。通常会首选brew的apachectl(由于PATH变量的默认内容,您的可能会有所不同)。AFAIR brew的apachectl不会使用默认的启动选项(即apachectl start)启动Apple的httpd 。与... configtest
klanomath

“使用Ansible来设置Apache”是指本指南:Mac Development Ansible Playbook?最好将链接添加到“操作方法”或“设置指南”。各种macOS版本的各种设置指南均包含略有不同的配置/创建不同的环境。
klanomath '17

我这个周末刚刚更新到High Sierra,而我也遇到了同样的问题。我一直在使用Homebrew httpd公式,现在apache没有响应。当我这样做时brew services list,我也started用黄色获得了httpd的名称,当我运行时sudo apachectl stop,它告诉我httpd (pid 87?) not responding.
wonder95 '18

Answers:


16

在我看来,您通过执行太多与httpd相关的命令来管理各种httpd启动守护程序/启动机制。

安装了homebrew和homebrew的apache-httpd以及默认的PATH后,您有六种启动httpd的方法。

苹果的Apache:

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

自制软件的Apache:

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

如果您复制文件homebrew.mxcl.httpd.plist手动要么〜/库/ LaunchAgents /或/库/ LaunchDaemons /你有两个选择通过加载它们来启动它(sudo) launchctl load ...

如果您没有修改httpd配置文件或apachectl脚本,则Apple分支将使用/ var中的Apple httpd.conf文件和/ Library文件夹中的DocumentRoot。

自制程序分支使用/ usr / local /中的子文件夹。

如果将httpd端口绑定到小于1024的端口,则某些启动方法将不起作用!

如果(sudo) brew services ...用于启动httpd,则必须使用正确的(sudo) brew services list命令来检查状态:

如果您以root身份启动,则使用root privs列出它:

sudo brew services start httpd > sudo brew services list

或具有用户权限:

brew services start httpd> brew services list


要解决您的问题,请卸载Apple的httpd:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • 删除任何手动安装的homebrew.mxcl.httpd.plist
  • 使用以下命令停止任何自制的httpd服务 (sudo) brew services stop httpd
  • 停止由apachectl启动的任何httpd:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • 打开活动监视器,并检查没有任何httpd进程在运行。
  • 重启

现在-假设您想在特权端口上使用自制软件的httpd-输入:

sudo brew services start httpd

检查是否成功启动sudo brew services list


尝试提供的修补程序时,我收到的输出与我相同。 apachectl stop提供的输出,httpd (no pid file) not running当我运行时以黄色sudo brew services httpd start sudo brew services list 指示apache2(httpd)时started,当我尝试访问与网页相关的任何内容时都无法执行。我想知道是否已更新到10.13,从而阻止了Apache的启动。
Alcyeonnero

14

关于自制httpd,我最近遇到的一个问题是一个旧的剩余httpd.pid文件,阻止了httpd的启动。症状是apachectl start说httpd已经在运行,但是没有运行。

原因是这里的旧文件:

/usr/local/var/run/httpd/httpd.pid

解决方法是删除此pid文件,然后启动httpd。


大!这是我的问题,当我的MBP决定它不会从睡眠中唤醒时,我必须重新启动它。
frumbert

2
该解决方案在MacOS Mojave中也适用。Brew认为Apache正在运行,但是没有httpd活动监视器。这样就解决了。
Vahid Amiri

这省了我很多麻烦!
SEJU

这也为我工作。我无法加载任何网站,并不断收到ERR_CONNECTION_REFUSED。当我尝试列出正在运行的服务时,brew services list我的状态是黄色的“已启动”,这表示服务器的活动状态有问题。移除固定的pid,现在服务列表将活动状态显示为绿色的“已启动”,而不是现在。这次真是万分感谢!
Mike Kormendy

如果您的计算机在内核崩溃/停电/等之后硬重启,则可能是您遇到的问题。谢谢!
Dom Stubbs

2

在今天早些时候升级到High Sierra之后,我面临着同样的问题。我发现以下apache文件已替换为全新版本。幸运的是,对于所有这些文件,在同一文件夹中存在一个FILE〜previous文件。我只是将〜previous版本复制回原始版本,重新启动了Apache,一切都很好。

在文件夹中/etc/apache2

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

例:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

在该文件夹/etc/apache2/extra/中,大约有10个文件带有/etc/apache2/extra/
〜previous

我将从httpd.conf和httpd-vhosts.conf文件开始。如果您具有SSL设置,则还需要更新httpd-ssl.conf。其余的取决于您是否较早更改了它们。我将使用diff来查看文件是否已更改,例如diff httpd.conf httpd.conf〜其他所有其他文件上的上一个
Unmesh

我已经从那些文件开始,它并没有改变任何东西。
Alcyeonnero

1

我有同样的问题

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

这意味着httpd异常退出。

然后,我手动启动了httpd以查看问题所在

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

查看权限很明显

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

我认为我以root用户身份启动了httpd,这导致了此问题。我删除了文件,然后

brew services restart httpd

一切都很好。


1

我最近遇到这个问题。原因是自制软件在用户可访问的文件夹中安装了apache2 / httpd并以用户身份运行(通过运行命令:brew services start httpd)。

不以普通用户身份运行意味着httpd无法在特权端口(1024及以下)上侦听。

因此,即使将httpd.conf配置为侦听80和443,httpd也无法通过这些端口接收请求。

特殊之处是通过运行以下命令启动httpd时:sudo apachectl start。该命令以root用户身份启动httpd。允许根用户侦听端口80和443。然后,httpd放弃特权以_www用户身份运行。

因此,简短的答案是在端口80上运行homebrew httpd,并使用以下命令启动它:sudo apachectl start。您也可以使用以下命令启动它:sudo brew services启动httpd。Brew会告诉您它要求为root声明某些文件夹,我认为这很好,但不是必需的,因为sudo apachectl start不需要文件许可和/或所有者更改。


0

相反,我建议HomeBrew所说的总是由sudo运行httpd。如果您执行ps -aef | grep httpd,则会看到该列表列为正在运行。不使用sudo不会产生ps输出,这可能会给错误的印象httpd没有运行。

另外,我不确定这两种情况下是否加载了不同或相同的配置。我安装了PHP,并在DocumentRoot目录中使用phpinfo创建了test.php文件。如果您使用sudo启动apache,则在使用brew服务启动时,您可能会看到phpinfo和localhost / test.php。如果DocumentRoot位于需要root访问权限的区域,则httpd会给您错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.