httpdを起動しようとすると、次のエラーが発生します。
# service httpd start || journalctl -xn
..
[so:warn] [pid 425] AH01574: module ssl_module is already loaded, skipping
httpd[425]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443
httpd[425]: no listening sockets available, shutting
構文は大丈夫です。
# httpd -t
[so:warn] [pid 917] AH01574: module ssl_module is already loaded, skipping
Syntax OK
わかりましたので、二度ロードssl_module.so
されました。しかし、そうではありません:
# grep -ir ssl_module /etc/httpd/*
/etc/httpd/conf.d/ssl.conf:LoadModule ssl_module modules/mod_ssl.so
また、ポート 443 で何かがリッスンしているというメッセージも表示されます。しかし、そうではありません:
# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 336/sshd
tcp6 0 0 :::22 :::* LISTEN 336/sshd
私のhttpd設定は一度だけ受け取ります。
# grep -ir 443 /etc/httpd/*
/etc/httpd/conf.d/ssl.conf:Listen 443
/etc/httpd/conf.d/ssl.conf:<VirtualHost *:443>
Apacheはどのサービスも実行していません。
# top -u apache
..
(nothing)
ソケットがすでに使用中であることを示す警告とエラーがあるため、Apacheはssl_module.soをロードし、ポート443でリッスンする他のconfをロードするようです。
しかし、問題は..どこですか?
これはCentOS Linuxバージョン7.2.1511を実行するVPSの設定です。
答え1
問題は、最終的にhttpd.confに重複した行があったため、ssl.confが2回ロードされることでした。
次の行があります。
Include conf.d/*.conf
そしてもっと下へ:
IncludeOptional conf.d/*.conf
最初のエントリが削除され、問題が解決されました。
答え2
apache2 -X
デバッグする最も簡単な方法は、httpd -X
デバッグモードまたはビルドに従ってターミナルセッションでサーバーを実行することです。このフラグを使用して詳細レベルを上げることができます-e
。コマンド-S
フラグは設定をダンプします。他のフラグはページに記載されていますman
。
この-M
フラグはロードされたモジュールをリストします。 SSLは通常モジュールとして提供され、HTTPSを有効にする前にロードする必要があります。