在Ubuntu 18.04上启动Apache HTTP服务器失败

14

我正在尝试在我的Ubuntu 18.04上创建一个Web服务器,因此我安装了Apache2, 但我无法启动它。 当我运行systemctl status apache2.service命令时出现了以下内容

apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Sat 2020-02-22 13:58:09 CET; 34s ago
  Process: 2791 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
Feb 22 13:58:09 moemen apachectl[2791]: AH00558: apache2: Could not reliably determine the server's
Feb 22 13:58:09 moemen apachectl[2791]: (98)Address already in use: AH00072: make_sock: could not b
Feb 22 13:58:09 moemen apachectl[2791]: (98)Address already in use: AH00072: make_sock: could not b
Feb 22 13:58:09 moemen apachectl[2791]: no listening sockets available, shutting down
Feb 22 13:58:09 moemen apachectl[2791]: AH00015: Unable to open logs
Feb 22 13:58:09 moemen apachectl[2791]: Action 'start' failed.
Feb 22 13:58:09 moemen apachectl[2791]: The Apache error log may have more information.
Feb 22 13:58:09 moemen systemd[1]: apache2.service: Control process exited, code=exited status=1
Feb 22 13:58:09 moemen systemd[1]: apache2.service: Failed with result 'exit-code'.
Feb 22 13:58:09 moemen systemd[1]: Failed to start The Apache HTTP Server.

我不太懂,请您帮帮我。


2
欢迎来到SO!请确保没有其他网络服务器(如nginx)在同一端口上监听,或尝试更改端口。 - Vasil Velichkov
7个回答

34

我也遇到了同样的问题。

首先检查一下

$ sudo systemctl status nginx
如果nginx正在运行,请停止它,方法如下:
$ sudo systemctl stop nginx

然后在另一个终端尝试启动apache2服务器。


1
@Greenoline,谢谢。我在安装了apache2之后不知怎么安装了nginx,但是移除nginx-core和nginx-common解决了我的问题。 - el_tenedor
不是通用解决方案。最好检查Apache日志和netstat端口,以继续解决方案。 - Anurag Prashant

8

首先,删除apache2

sudo apt-get --purge remove apache2 sudo apt-get autoremove

之后,如果存在文件(.conf)/etc/sites-available,请使用以下命令将它们删除

rm example.com.conf

然后重新安装 sudo apt-get install apache2

现在问题已经解决了 立即检查它 sudo ufw allow 'Apache' sudo systemctl status apache2


经过数天的排障,我的问题在这个答案上得到了解决。非常感谢!(提示:除了删除并重新安装apache2之外,还应该删除/etc/apache2目录,因为它包含已删除安装的残留文件。) - TheGeeko61

4

我给出一个比前两个更一般的答案。Apache可能遇到的一个问题是,当我们尝试运行它时,它可能会失败,因为端口80被另一个软件使用:

  • 常见情况是nginx,Devashish Mishra已经覆盖了这个
  • 在我的情况下,是我部署的服务器应用程序(在node.js中,我必须告诉pm2停止它)
  • 一般来说,您可能想找出谁在使用80端口。这可以像Chi.C.J.Rajeeva Lochana建议的那样完成:如果您没有netstat,请安装它(sudo apt install net-tools),并使用它:sudo netstat -antup | grep 80。它将显示一些行,其中可能包括::: 80<your IP>:80,这将告诉您是什么在监听该端口

一旦找到了监听80端口的程序,就需要决定如何处理它们。例如,如果是nginx且您不使用它,则可以像Devashish Mishra建议的那样停止它(sudo systemctl stop nginx)。同样,您可以停止或杀死其他程序(sudo killall -9 program-name)。但是,如果您需要它们,则还需要进一步配置Apache并重新运行它们(确切的步骤高度取决于情况)。


2
我发现了这个问题,并通过创建一个文件夹/var/log/apache2来解决它,我在/var/log/文件夹中检查,发现没有apache2文件夹,就像mysql无法启动的情况一样。
从你的日志中看到: Feb 22 13:58:09 moment apachectl[2791]: AH00015: Unable to open logs 也许这会有所帮助。

2

请仔细阅读。

执行以下命令,如果您看到它是apache,则在该命令下执行以下操作。
注意:在运行netstat之前,您需要安装net-tools软件包。运行sudo apt install net-tools进行安装。

sudo netstat -antup | grep 80

你应该检查带有类似于<你的IP>:80的行。
请注意,当Apache正在运行时卸载它也可能发生这种情况。

命令可能是:

sudo killall -9 program-name

如果在端口80上运行的程序无法停止,请将 program-name 替换为该程序的名称。如果此方法不起作用,请告诉我。谢谢。


0
另外,检查一下你的证书。如果你查看Apache日志,可能会告诉你证书不匹配。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到更多关于如何撰写好回答的信息。 - undefined

-2
  1. 在您的终端上。
  2. 输入:sudo stop /etc/init.d/apache2

响应将是:

正在停止apache2(通过systemctl):apache2.service。

  1. 现在启动服务器:
sudo /opt/lampp/lampp start

如果您正确安装了lamp,这个应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接