48)地址已在使用中:AH00072:make_sock:无法绑定到地址[::]:80

问题描述 投票:0回答:9

当我尝试访问任何文件夹或文件时,出现 apache 错误,它返回

Http Not found
Forbidden
我正在尝试重新启动并启动 apache

sudo apachectl restart

输出:

(48)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs

我正在尝试阻止它

sudo apachectl stop

输出

httpd (no pid file) not running

我跑步

sudo lsof -i:80

输出:

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

    httpd    8904 root    5u  IPv6 0x21884d81f1597d8f      0t0  TCP *:http (LISTEN)
    httpd    9012 _www    5u  IPv6 0x21884d81f1597d8f      0t0  TCP *:http (LISTEN)
    httpd   12726 _www    5u  IPv6 0x21884d81f1597d8f      0t0  TCP *:http (LISTEN)
    httpd   12731 _www    5u  IPv6 0x21884d81f1597d8f      0t0  TCP *:http (LISTEN)
    httpd   12732 _www    5u  IPv6 0x21884d81f1597d8f      0t0  TCP *:http (LISTEN)

有办法解决这个问题吗?

有用信息:

OS X El Capitan
php macos apache localhost
9个回答
61
投票

在我的 Mojave (10.14.1) Mac 上,突然 Apache 无法再提供 ipv4 服务,然后给我错误 403。我试图杀死所有 apache (sudo Killall httpd)...检查 PID 是否开启 (sudo lsof | grep AMP | grep apache)...甚至不起作用...只有 ipv6 可用...仍然错误 403。

对我有用:禁用 OSX 的内置 Apache 服务器。

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

之后:

sudo apachectl -k restart

要快乐:)


18
投票

尝试

sudo netstat -ltnp | grep ':80'

输出:tcp6 0 0 :::80 :::* 监听 1500/apache2

sudo kill 1500
sudo service apache2 restart

16
投票

这个对我有帮助:

请编辑httpd.conf文件。

/usr/local/etc/httpd/httpd.conf

并更换

Listen 80

Listen 127.0.0.1:80

重新启动阿帕奇

sudo apachectl -k restart

10
投票

可能会发生以下几种情况之一:

  1. 您正在运行不同版本的 apache。您可以通过运行
    which apachectl
    来确保您使用的是正确的。举个例子,我还有两个版本的 apache
    /usr/sbin/apachectl
    /usr/local/bin/apachectl
  2. 您没有以 root 身份运行
    apachectl start
    ,尽管看起来您是这样。
  3. 您可以运行
    sudo lsof -i:80
    查看当前绑定该端口的内容

7
投票

发生此错误是因为 apache 服务器默认侦听端口 80,因此另一个服务或程序正在使用该端口,并且 apache 无法启动。

解决方案是确定哪些程序或服务正在使用该端口,然后将其关闭、禁用或卸载。

为了识别您可以运行 netstat

sudo netstat -ltnp | grep ':80'

sudo lsof -i:80

就我而言,我同时安装了 nginx 和 apache,并且都使用端口 80。

临时解决方案:停止或终止服务、程序等

永久解决方案:

  1. 在配置文件中更改apache服务器的端口 /etc/apache2/apache2.conf
  2. 卸载使用端口 80 的服务或程序。

就我而言,我需要两者,所以我决定通过禁用该服务来临时修复它:

systemctl stop MyServiceName.service

如果是服务,否则使用kill命令。


5
投票

我之前也这样设置过配置,上次升级 OSX 后遇到了同样的问题。我试图找到任何正在侦听端口 80 或 443 的东西,但在任何地方都找不到任何东西。 我花了一段时间,终于找到了另一篇描述实际有效修复的文章。 请记住,我使用的是自制软件安装,并卸载了 Mac OSX 附带的默认 apache2 安装。

这是我之前在 httpd.conf 中的内容:

Listen 80

我在 ssl.conf 中有类似的东西

Listen 443 https

我必须更改我的 httpd.conf 文件以使用 localhost 的 ServerName 并在 0.0.0.0:80 上监听,对于 ssl.conf 也是如此,但 0.0.0.0:443 https

httpd.conf:

ServerName localhost
Listen 0.0.0.0:80

和 ssl.conf

Listen 0.0.0.0:443 https

当我尝试再次启动它时,一切都很愉快。 希望有帮助! 我会链接到该文章,但我无法再次找到它!


0
投票

嗯,看起来 httpd 已经在运行了。检查运行

lsof -i TCP:80
命令 PID 用户 FD 类型 设备大小/关闭节点名称
httpd 281 root 3u IPv6 19479 0t0 TCP *:80(监听) ....

所以杀死 httpd 并做你想做的事


0
投票

如果您最近完成了软件更新,并且重命名或删除了 /etc/httpd/conf.d/ 中的任何默认文件,请查看那里。您可能有重复的指令,因为包管理器重新安装了它们。

就我而言,我在文件前添加了数字前缀,这样我就可以控制加载顺序...但是操作系统更新重新安装了原始文件,因此 我有两个带有“Listen 443”的文件,它们存在冲突并且未被语法检查捕获。删除操作系统文件解决了该问题。

(这次我保留了它们,但将它们清空,这样重新安装或更新时就会显示冲突)


0
投票

我遇到这个错误是因为conf文件中重复的Listen on port 80 也请务必检查一下。

Listen 80
...
Listen 80
© www.soinside.com 2019 - 2024. All rights reserved.