Apache 2 无法绑定,地址已被使用

Apache 2 无法绑定,地址已被使用

我在 Ubuntu 12.10 上安装了 Apache 2。当我尝试使用 启动服务时sudo /etc/init.d/apache2 start,收到以下消息。

*Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 127.0.0.1:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.                                 [fail]

答案1

很可能您已在该端口上运行了某些程序(或“绑定到”)该端口。尝试使用此命令查看相关进程:

sudo lsof -i :80

这列出了在端口 80 上监听的进程。一旦您找到了罪魁祸首,您就知道该处理哪个进程killkill -9也可以作为超级用户)。

请记住,Apache 实例(假设您之前已启动)可能已“过时”或变为僵尸。在后一种情况下,在某些情况下甚至可能需要重新启动。

否则,请遵循 dedunumax 的答案。

答案2

尝试sudo service apache2 start

然后输入

sudo service apache2 status

第二条命令将显示它是否正在运行。

答案3

我使用以下配置收到此错误消息:

# cat /etc/hosts
127.0.0.1   localhost
127.0.0.1   foo
...

# cat /etc/apache2/sites-enabled/foo
<VirtualHost foo:80>
...

# cat /etc/apache2/ports.conf 
...
NameVirtualHost *:80
Listen localhost:80
...

更改ports.conf为以下内容解决了问题:

NameVirtualHost *:80
Listen 127.0.0.1:80

答案4

Nginx 等一些其他软件可能正在运行并使用端口 80。

Apache2 在我的 VPS 上崩溃,并显示相同的消息错误,我发现服务器上存在 Nginx,并且几天后有某个程序(cron 作业?)启动了它。这引发了冲突,因为它使用端口 :80,并且不知何故优先于 Apache2。

要检查是否有任何东西已在使用端口 :80,请输入:

netstat -tulpn

我通过卸载 Nginx(使用“remove --purge”)、终止 nginx 进程并重新启动 Apache2 解决了这个问题。

相关内容