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

26

当我尝试访问任何文件夹或文件时,出现了 Apache 错误,返回 Http Not foundForbidden。我正在尝试重启和启动 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

有没有检查过在80端口上是否有任何监听的东西?也许可以用netstat来查看一下。 - frz3993
1
SO是用于编程问题的,而不是关于使用或配置Linux及其应用程序的问题。SuperUser或[unix.se]将是更好的地方来提出这样的问题。 - Barmar
可能是Amazon EC2 - Apache服务器重启问题的重复。 - erhanasikoglu
8个回答

59

在我的Mac上,使用Mojave(10.14.1),突然Apache无法再提供ipv4服务,然后给了我ERROR 403。我尝试杀掉所有的apache(sudo killall httpd)...检查PID(sudo lsof | grep AMP | grep apache)...甚至不起作用...只有ipv6可用...仍然ERROR 403。

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

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

之后:

sudo apachectl -k restart

开心点 :)


运行得非常好!从自动加载中删除apachectl - 成功了。 - AndrewShmig
谢谢,我一直在进行Apache设置,直到我发现这个错误更改sphp版本。我使用的是Mohave 10.14.3。 - Lamellama
哇,谢谢。我尝试了很多方法,最终这个方法有效了 :) - programmer
对我也起作用了!谢谢! - undefined

16

这个对我有帮助:

请编辑httpd.conf文件。

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

并替换

Listen 80

随着

Listen 127.0.0.1:80

重新启动apache

sudo apachectl -k restart

1
我尝试使用其他答案中提到的命令来识别阻塞端口80的问题,但是我没有找到任何阻止器。但是你的解决方案对我有效。谢谢! - Karsai Péter
我在本地 https 设置中遇到了这个问题,将“Listen 443”更新为“Listen 127.0.0.1:443”,类似于下面 Evan 的笔记。- 谢谢 @Nuzil - smithml

15
尝试
sudo netstat -ltnp | grep ':80'

输出:tcp6 0 0 :::80 :::* LISTEN 1500/apache2

sudo kill 1500
sudo service apache2 restart

这个对我有用,经过几个小时的头痛终于完美地解决了,我现在感觉很愚蠢哈哈。感谢提供的解决方案。 - Diaz Farindra

10

可能发生了以下两种情况之一:

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

啊,所以你正在运行 httpd。我忘记了什么时候,但是 macOS 有一个更新,改变了它正在使用的 Apache 目录并重命名了进程。这相当混乱了我的本地开发环境。 - Tomasz Lloyd
2
您可以运行 sudo httpd -k stop 命令停止服务,然后尝试正常重启 Apache。我会运行 which apachectl 命令查找正在使用的版本。Apache 配置文件的旧位置在 /etc/apache2,但 Apple 已将其移动到 /usr/local/etc/httpd。您可以使用以下命令找到服务器配置文件: apachectl -V | grep SERVER_CONFIG_FILE - Tomasz Lloyd
1
lsof 让我找对了方向,似乎我安装了 nginx,它占用了该端口。 - Alim Özdemir

6

这个错误的原因是 Apache 服务器默认监听80端口,所以其他服务或程序正在使用该端口,导致 Apache 无法启动。

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

可以运行 netstat 命令来进行确认。

sudo netstat -ltnp | grep ':80'

或者
sudo lsof -i:80

在我的情况下,我同时安装了nginx和apache,并且两者都使用80端口。

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

永久解决方案:

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

在我的情况下,我需要两个服务,所以我决定通过禁用服务来暂时修复问题:

systemctl stop MyServiceName.service

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


4
我以前也是这样设置我的配置的,但在我上次升级OSX后遇到了相同的问题。我试图查找任何在80或443端口上监听的内容,但无论在哪里都找不到。花了一段时间,终于找到了另一篇描述可行解决方法的文章。请注意,我正在使用homebrew安装,并卸载了Mac OSX附带的默认apache2安装。
以下是我以前在httpd.conf中拥有的内容:
Listen 80

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

Listen 443 https

我不得不修改我的httpd.conf文件,将ServerName更改为localhost,并在0.0.0.0:80上进行监听,ssl.conf也同样如此,但用于https的端口是0.0.0.0:443。

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
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 281 root 3u IPv6 19479 0t0 TCP *:80 (LISTEN) ....

因此,杀死httpd并做你想做的事情。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Rohit Gupta

0

如果您最近进行了软件更新,并重命名或删除了 /etc/httpd/conf.d/ 中的任何默认文件,请去那里看一下。您可能会出现重复指令,因为包管理器重新安装了它们。

在我的情况下,我用数字给文件加了前缀,这样我就可以控制加载顺序...... 但是操作系统更新重新安装了原始文件,所以我有两个包含 "Listen 443" 的文件发生了冲突,并没有被语法检查捕捉到。删除操作系统文件解决了问题。

(这次我把它们保留了下来,但将它们设置为空,以便在重新安装或更新时显示冲突)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接