启动Apache失败(无法绑定到地址0.0.0.0:80)

58

更新:已经修复,似乎是sites-enabled目录下的一个VirtualHost配置文件有误。

我的操作系统是Ubuntu 11.10。

当我运行启动apache2的命令时:

sudo /etc/init.d/apache2 start

我遇到了以下错误消息:

启动Web服务器apache2
apache2:无法可靠地确定服务器的完全限定域名,使用127.0.1.1作为ServerName (98)。地址已在使用中:make_sock:无法绑定地址0.0.0.0:80,没有可用的侦听套接字,关闭日志无法打开日志文件。启动"start"操作失败。

我运行这个命令以获取正在使用端口80的进程:

sudo netstat -ltnp | grep ':80'

它返回以下输出:

tcp6       0      0 :::80                   :::*                    LISTEN      1176/

要知道我运行了哪个进程,可以使用以下命令:

ps -wlp1176

返回的结果是:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
5 D    33  1176     1  0  80   0 -     0 exit   ?        00:00:00 apache2

但是如果我尝试终止该进程:

sudo kill -9 1176

如果我再次运行netstat命令,则会发现它并没有关闭,而且apache启动失败。

有任何建议吗?


2
那么pid 1176是什么? (ps -wlp1176) - geekosaur
5 D 33 1176 1 0 80 0 - 0 exit ? 00:00:00 apache2 - rfc1484
那么,这对你有什么直观的建议吗?提示:与你试图启动的内容进行比较。 - geekosaur
我觉得Apache已经在运行了,但它无法提供页面,也无法停止、启动或重新启动。 - rfc1484
1
我刚遇到了类似的情况。一个pid为1345的apache2进程占用了80端口,但是没有响应任何请求。使用kill 1345命令结束该进程后,我就可以启动新的apache2进程了。 - Mika
12个回答

117

这个命令对我起了作用:

fuser -k -n tcp 80

在我的Debian 4.0.4上也起作用了。 - StandDuPp
每次重启实例都会出现这个错误。你知道怎么完全解决它吗? - Lam
对于没有端口绑定问题和出现虚拟主机语法错误的人,首先要做的是查找Listen值。请参考http://wiki.apache.org/httpd/CouldNotBindToAddress中的***冲突的Listen指令部分***。 - m3nda
5
这个答案需要解释一下为什么它有效才能真正有用。 - Aslan French

18

可能是 Skype 或 Nginx 正在使用 80 端口。

请尝试关闭 Skype,或运行:sudo /etc/init.d/nginx stop


6
我遇到了同样的错误,只是想确认运行以下代码是否有效:
    sudo netstat -ltnp | grep ':80'

帮助我发现 Hiawatha web 服务器与 Apache2 冲突。

删除 Hiawatha 后问题得到解决(sudo dpkg --purge hiawatha)。Ubuntu 12.04.2 服务器。


5

使用任何一种

sudo killall httpd

或者

sudo killall apache2

检查是否有人在使用80端口

sudo netstat -tulpn| grep :80

重启
sudo service httpd start

然后重启服务器。我花了一整天的时间才理解这个问题。

输入图片描述


5
我遇到了同样的问题。对我来说,Apache已经在运行,但是运行方式不正确。杀进程无效,因为守护进程不断地重新启动它。
apachectl stop   

解决了该问题。

3

试一下这个,对我有效...

sudo netstat -ltnp | grep ':80'

这将返回以下内容:
tcp6 0 0 :::80 :::* LISTEN 1047/apache2

那么

sudo kill -9 1047

然后我就能重新启动 Apache 了,一切都正常工作。


1
这将发生是因为 Apache 反复安装或端口被另一个服务占用。
sudo lsof -i | grep "httpd"

您将找到服务的进程ID和监听端口。然后检查。
cd /proc/(process id of http)

然后使用命令杀死该进程。
kill -9 pid

现在。
sudo netstat -nltp

再次杀死进程

语法:-

kill -9 pid

并且现在启动apache

sudo ./apachectl start

1

打开设备管理器,从菜单/视图中选择“显示隐藏的设备”,进入“非即插即用驱动程序”/HTTP选项,双击它以禁用它(并禁用或手动一些依赖它的服务)。 重新启动电脑,享受使用吧!


1

它看起来像是另一个进程正在使用端口80。

$ netstat -anp | grep

通过上述命令,您可以获得进程名称。如果您想使用端口,则需要停止该进程或更改端口。

0

我通过以下步骤解决了这个问题。 以 root 用户身份运行以下命令。

root# ps aux |grep apache

它将显示Apache PID,只需杀死那些PIDs并重新启动Apache服务器。


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