如果我在 ubuntu 18.04LTS 中的“/etc/apache2/ports.conf”文件中打开 SSL 端口 443,则无法重新启动 apace2

如果我在 ubuntu 18.04LTS 中的“/etc/apache2/ports.conf”文件中打开 SSL 端口 443,则无法重新启动 apace2

我遇到了一个问题18.04。我想为我的网站配置 SSL,因此我编辑了配置文件etc/apache2/ports.conf并添加了类似的行Listen 443,但是当我这样做时,service apache2 restartapahce 服务无法重新启动,但它就像16.04那样正常工作。然后我删除了该行Listen 443并且 Apache 服务再次工作。

它说:Job for apache2.service failed because the control process exited with error code.See "systemctl status apache2.service" and "journalctl -xe" for details.

journalctl -xe

 ubuntu apachectl[2867]: AH00526: Syntax error on line 8 of /etc/apache2/ports.conf:
 ubuntu apachectl[2867]: Cannot define multiple Listeners on the same IP:port
 ubuntu apachectl[2867]: Action 'start' failed.
 ubuntu apachectl[2867]: The Apache error log may have more information.
 ubuntu systemd[1]: apache2.service: Control process exited, code=exited status=1
 ubuntu systemd[1]: apache2.service: Failed with result 'exit-code'.
 ubuntu systemd[1]: Failed to start The Apache HTTP Server.

第 8 行就是我添加的。16.04如果我做同样的事情,它确实会起作用,我想知道有什么变化吗18.04

答案1

我进行了一项小调查 - 是的,Ubuntu 16.04 和 Ubuntu 18.04 附带的 Apache2 版本之间存在不同的行为。

  • 16.04附带阿帕奇/2.4.18并且无论您重复多少次相同的 Listen 指令 - 我已经在虚拟机上进行了测试。

  • 18.04附带阿帕奇/2.4.29并在当前 Apache2.4 文档写为:

    错误情况

    对同一 IP 地址和端口执行多个 Listen 指令将导致出现 Address already in use 错误消息。

在您的情况下,该指令Listen 443在 Apache 的配置中出现了两次,因此根据这些新规则,收到上述错误是正常的。

默认情况下,在 内ports.conf,指令Listen 443是用<IfModule>标签括起来的,如下所示:

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

mod_ssl这意味着它仅在(或mod_gnutls)启用时才会激活。因此,如果您已启用mod_ssl,则无需添加任何额外的Listen 443


Listen 443您可以使用以下命令调查该指令在您的配置中出现的次数和位置:

grep -rni 'listen 443' /etc/apache2/

您可以通过以下命令检查哪些 Apache 模块已启用:

sudo apachectl -M
sudo apachectl -M | grep 'ssl\|tls'

您可以使用以下命令检查是否有任何服务监听端口 443 以及它是什么:

sudo lsof -i -n -P | grep ':443'
sudo netstat -peanut | grep ':443'

进一步阅读:如何使用 Let's Encrypt 保护 Apache

相关内容