Apache无法启动,地址已在使用中(但不是真的)


58

我正在尝试设置运行Ubuntu 12.04的VM。我有两个使用端口80配置的虚拟主机,但是Apache无法启动。

我收到此错误:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

的输出netstat -tulpn显示什么都没有使用端口80。可能是什么原因引起的?


您以root身份启动吗?默认情况下,只有root用户可以打开1024以下的端口
ONSE

我是。当我只配置了一个虚拟主机时,它在某一时刻运行,因此此后我删除了另一台虚拟主机以尝试解决此问题,但也没有运气。
Gunner Barnes 2013年

您的主机是否在端口80上运行了某些内容,并且为访客处于桥接模式?我不知道它会那样做,但是似乎很有可能
RobotHumans 13-4-2

您是否尝试过“ 启动apache失败(无法绑定到地址0.0.0.0:80)”中的建议?并请还包括的输出grep -ri listen /etc/apachesudo netstat -ntlp | grep 80
gertvdijk 2013年

2
grep -ri listen /etc/apache2输出:etc / apache2 / httpd.conf:侦听80 /etc/apache2/httpd.conf:侦听443 /etc/apache2/ports.conf:侦听80 /etc/apache2/httpd.conf:侦听443 / etc / apache2 / httpd.conf:监听443 sudo netstat -ntlp | grep 80根本不输出任何内容。
Gunner Barnes 2013年

Answers:


38

确保您不在Listen 80.conf文件中声明两次。

例如,您可能在in ports.conf和inn中都拥有它sites-enabled/www.conf

要找出答案,请使用: grep -ri listen /etc/apache2

Listen 80在短短的一个地方。


19

回答我解决此问题的方式。将来可能对某人有所帮助。

尝试 netstat -ltnp | grep :80

这将返回类似

tcp6 0 0 ::: 80 ::: *听1047 / apache2

然后跑

sudo kill -9 1047

其中1047是在端口80上运行的程序的pid。您可以替换从中获得的pid。 netstat


哇!...在这里,我是在向inmotionhosting发送票证并等待答复之后48小时。谢谢
Amjo

2
这是什么意思?我没有PID或名称。tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
亚伦·弗兰克

@AaronFranke您可以在最大化窗口后尝试在终端中运行此命令吗?
匿名鸭嘴兽

2
@AaronFranke使用sudo运行它。您可能没有查看权限。
凌晨16:37

13

当我遇到这个问题时,结果是因为我的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可以正常启动。


11

启动apache2 Ubuntu 12.10时,在全新安装中出现此错误。

这是apache2中的错误。它挂在后台。这是我逐步了解软件中可能存在错误的位置。

这是我得到的错误:

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

地址已在使用中?有什么用呢?看看这个:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

这意味着apache2正在阻止apache2启动。奇怪 这将确认:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

是的,在这种情况下apache2正在运行,我试图再次在同一端口上启动apache2。

令我感到困惑的是service报告说apache2没有运行:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

当您查询apache2ctl的状态时,它会挂起。

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

因此,Ubuntu似乎在启动时无法管理apache2。停止apache2的时间:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

一个大提示!您尝试停止apache2,它丢失了进程ID!所以Ubuntu无法停止apache2,因为它不知道它在哪里!

您可能会认为重新启动会解决该问题,但这不是因为apache2在启动时启动并挂起。apache2的正常启动过程无法正常进行。

那么如何解决呢?

我能够通过分析ps命令输出来解决此问题。注意,该ps命令告诉我们该进程是通过“ /etc/rc2.d/S91apache2 start”启动的。

那是有问题的程序,需要迅速采取行动。

/etc/rc2.d/S91apache2是计算机启动时用于为您启动apache2的符号链接。由于某种原因,它似乎正在启动apache2,然后挂起。因此,我们必须告诉它不要这样做。

所以去看看吧/etc/rc2.d/S91apache2

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

这是一个符号链接,我们不希望它存在。这样做是为了防止apache2在启动时启动:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

重新启动计算机,以确保apache2不会启动并挂起。好的 现在您可以将apache2恢复原状,但这会使它再次失败。

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

相反,像这样启动apache2:

sudo service apache2 start

apache2已备份并再次提供页面。apache2 / Ubuntu 12.10似乎存在一些严重的错误,导致apache2启动并挂起。这是一个解决方法,我想解决的办法是获得apache2和Ubuntu的较新版本,并希望取得最好的成绩。


喜欢阅读和使用您的提示!感谢您编写“调试方式”!
2016年

10

我有一个Nginx服务器在我的AWS EC2服务器上侦听,我认为在构建EC2时已对其进行了配置,因此是我收到了Address in use错误。因此,我停止了该服务并启动了Apache2服务:

sudo service nginx stop
sudo service apache2 start

万分感谢!毕竟这对我有用。
Vivek

4

我知道了。我的httpd.conf和ports.conf中都有重复的Listen 80命令

另外,在为正在虚拟化的服务器复制配置文件时,我忽略了错误日志目录已更改的情况。在查看该错误日志时,我注意到mime.types配置文件的目录在我的httpd.conf文件中不正确。我更新了该参数,服务器启动正常。


3
Listen 80httpd.confports.conf
Gunner Barnes

2

这意味着您已经在使用端口80,可以通过编辑以下命令来更改apache2的端口(我不建议这样做):

/etc/apache2/ports.conf

或关闭端口80上运行的应用程序:

netstat -antp | grep 80

查找端口80上正在运行的内容。


netstat -antp | grep 80也没有输出。
Gunner Barnes

您可以复制并粘贴netstat -antp的输出吗?grep 80?
Dylan Dodds

实际上没有输出。
Gunner Barnes

嗯,这很奇怪,尝试将端口更改为81,如果不是,则不是端口被阻塞,还有另一个错误可以检查/var/log/apache2/error.log中的apache2错误
Dylan Dodds 2013年

2

对于任何可能正在使用NAT网络运行VirtualBox的人来说,这只是一个提示。我发现,在来宾和主机之间建立了NAT规则,将其绑定到端口


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.