我遇到了一个问题18.04
。我想为我的网站配置 SSL,因此我编辑了配置文件etc/apache2/ports.conf
并添加了类似的行Listen 443
,但是当我这样做时,service apache2 restart
apahce 服务无法重新启动,但它就像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。