18.04
で問題が発生します。Webサイトの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
で何か変更がありますか?
私は小さな調査を実施しました-はい、Ubuntu 16.04とUbuntu 18.04に付属するApache2のバージョン間で異なる動作があります。
16.04にはApache/2.4.18が付属しており、どのように関係なく何回も同じListenディレクティブを繰り返します-私はそれを仮想マシンでテストしました。
18.04にはApache/2.4.29と 現在のApache2.4ドキュメント が書かれています:
エラー状態
同じIPアドレスとポートに対して複数のListenディレクティブを使用すると、アドレスが既に使用中のエラーメッセージが表示されます。
あなたの場合、ディレクティブListen 443
はApacheの設定内に2回出現するため、これらの新しいルールによれば、上記のエラーを受け取るのは正常です。
デフォルトでは、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を保護する方法。