我正在尝试设置运行 Ubuntu 12.04 的虚拟机。我使用端口 80 配置了两个虚拟主机,但 Apache 无法启动。
我收到此错误:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80
输出netstat -tulpn
显示没有任何东西使用端口 80。这可能是什么原因造成的?
答案1
确保您没有Listen 80
在 .conf 文件中声明两次。
例如,您可能同时拥有 inports.conf
和 inn sites-enabled/www.conf
。
要找出答案,请使用:grep -ri listen /etc/apache2
仅保存Listen 80
在一个地方。
答案2
回答我解决这个问题的方法。将来可能会对某人有所帮助。
尝试netstat -ltnp | grep :80
这将返回类似
tcp6 0 0 :::80 :::* 监听 1047/apache2
然后运行
sudo kill -9 1047
其中 1047 是在端口 80 上运行的程序的 pid。您可以替换从netstat
答案3
我有一个 Nginx 服务器在监听我的 AWS EC2 服务器,我认为它是在我构建 EC2 时配置的,因此我得到了 Address already in use 错误。所以我停止了该服务并启动了 Apache2 服务:
sudo service nginx stop
sudo service apache2 start
答案4
当我遇到这个问题时,原来是因为我的 Apache 无法在启动时启动,因为我有一个 SSL 站点,需要输入证书密码。
判断您是否属于这种情况的一个好方法是运行ps -ef | grep apache
:如果返回的进程看起来像是/bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA
等待在您永远看不到的终端中输入密码。
首先,我杀死了挂起的进程(kill -HUP
向 /usr/sbin/apache2 进程的进程 ID 发送一个应该足以杀死其他进程,但ps -ef | grep apache
为了确保万无一失,还要再做一次)。
然后我按照说明在这篇文章中创建一个不需要输入密码的 SSL 密码文件。然后一切service apache2 start
正常,Apache 在重启后正常启动。