我在 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 上监听的进程。一旦您找到了罪魁祸首,您就知道该处理哪个进程kill
(kill -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 解决了这个问题。