Apache 2.2を久しぶりに触った時にハマったので恥を忍んでメモとして残しておく。
■ 環境
- Apache 2.2
- Amazon Linux
■ はじめに
Apache自体は凄く久しぶりに触った気がする。設定とかディレクティブとかはもうあまり覚えていない。そんな時に触らねばならなくなり、、設定を入れ込んでみたもののイメージ通りに動いてくれず。一度元の状態に戻してから、整理しながらまた設定してみよう、というのが話の始まり。
■ 起動できない
設定を元に戻した(つもり)で、起動してみたところ下記のようなエラーが出て起動できなかった。
$ sudo service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
[ OK ]
$
いや、そんなはずない。。と思いつつ調査開始。まずは下記2つを確認した。
- ポート80番が開いているのか?
- ポート80番を使用しているプロセスはいるか?
1点目を下記コマンドで確認。
$ ss -nlt
ポート80番は出てこない。見覚えの無い他のポートは開いているが。
2点目を下記コマンドで確認。
$ sudo lsof -i :80
こちらでもポート80番を使用しているプロセスは確認できない。
さて何が原因なのか?他のプロセスが一時的に使用していたりするのか?と思い、他の見慣れないポート番号を使用しているプロセスを落としてみたが、現象は変わらず。プロセスも一通り見てみたが、ポート80番を使用していると思われるプロセスは特に見つからない。
と、しばらく悩んでふと気がついた。
Listen 80
元に戻したつもりが、上記を追加してしまっていた様子。。設定ファイル上に2ヶ所で上記があった為に起こってしまっている現象であったようである。追加してしまっていた箇所をコメントアウトしたところ、正常に起動してくれるようになった。
ちなみに、設定ファイル内に複数の同じポート番号の”Listen“ディレクティブがあっても”configtest“は正常に通ってしまうようである。
$ sudo service httpd configtest
Syntax OK
$
以上。
■ 関連
- Listenディレクティブ (公式)