我无法启动使用 apt-get 安装的 apache2。我在两个不同的 Ubuntu 12.10 安装中都遇到了同样的错误,一个在我的台式电脑上,另一个在 VirtualBox 中运行:
michal@michaltest:~$ sudo service apache2 start
* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
[fail]
lsof 说:
michal@michaltest:/var/log/apache2$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ubuntu-ge 2074 michal 11u IPv4 23978 0t0 TCP michaltest.local:47578->mulberry.canonical.com:http (CLOSE_WAIT)
firefox 25194 michal 71u IPv4 42477 0t0 TCP michaltest.local:59793->69.59.197.29:http (ESTABLISHED)
firefox 25194 michal 76u IPv4 41834 0t0 TCP michaltest.local:59698->69.59.197.29:http (ESTABLISHED)
gvfsd-htt 25320 michal 12u IPv4 42568 0t0 TCP michaltest.local:56203->lb260.amst.cotendo.net:http (CLOSE_WAIT)
netstat 说:
michal@michaltest:/var/log/apache2$ sudo netstat -lnp | grep '80'
unix 2 [ ACC ] STREAM LISTENING 8030 876/acpid /var/run/acpid.socket
/var/log/apache2/error.log:
[Thu Nov 08 11:13:30 2012] [notice] Apache/2.2.22 (Ubuntu) configured -- resuming normal operations
[Thu Nov 08 11:17:32 2012] [notice] caught SIGTERM, shutting down
/etc/apache2/ports.conf:
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
感谢您的帮助。
编辑#1:
michal@michaltest:~$ sudo netstat -ano | grep '443'
tcp 54 0 10.0.2.15:58504 91.189.92.70:443 CLOSE_WAIT off (0.00/0/0)
答案1
你只需要删除 nginx(3 个包)就可以了.....
你的主要问题是没有可用的监听套接字.您遇到此问题是因为另一个应用程序/服务获取了端口 80在您的 Ubuntu 服务器上。
现在您需要终止获取端口 80 的进程。您可以使用以下命令轻松找到该进程:-
sudo netstat -ltnp | grep':80'
这将返回类似以下内容:-
tcp 0 0 127.0.0.1:80 0.0.0.0:* 监听 1588/aolserver4-nsd
对于上述情况进程号 1588获得端口 80,您需要终止该进程 1588。
sudo kill -9 1588
现在你可以通过以下命令启动 Apache 服务器
sudo /etc/init.d/apache2 启动
答案2
解决“apache2:无法可靠地确定服务器的完全限定域名,使用 127.0.1.1 作为 ServerName”错误,请在 apache2.conf 文件中指定以下内容
ServerName HOSTNAME_OF_THE_SERVER
保存conf文件并重新启动apache服务器。
请发布输出sudo netstat -ano | grep '443'
另外,请确保如果您配置 apache 来监听 443/ssl 端口,那么您应该在 apache 网络服务器上配置 ssl 证书。
答案3
你有没有看到:
Unable to open logs
我认为您可以检查 /var/log/apache2 的权限!
答案4
听起来问题在于另一个进程打开了端口 443。您需要先终止该进程。
linux - 如何删除CLOSE_WAIT套接字连接 - 堆栈内存溢出说:
CLOSE_WAIT
意味着您的程序仍在运行,并且尚未关闭套接字(内核正在等待它关闭套接字)。添加-p
以netstat
获取 pid,然后更强制地将其杀死(如果SIGKILL
需要)。这应该可以摆脱您的CLOSE_WAIT
套接字。您也可以使用ps
来查找 pid。