amari3のはてなダイアリー このページをアンテナに追加 RSSフィード

2012-08-10

[][]/etc/hosts と hostname が違う場合は Apache の起動ができない

開発用に使ってたドメインが失効して、違うドメインを割り当てて運用してた Apache が、突然起動に失敗するようになった。

エラーログを確認すると以下の様なメッセージが出ている。*1

[Fri Aug 10 17:23:27 2012] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "hoge.example.com"

hostname コマンドで表示されるホスト名が以前のものになってて、名前解決ができずにエラーになっているものと判断したので、以下の手順で修正した。

1.ホスト名の変更

% sudo -e /etc/sysconfig/network
HOSTNAME=ホスト名
HOSTNAME=foo.example.jp

2./etc/hosts に記述しているホスト名を変更

% sudo -e /etc/hosts
127.0.0.1	foo.example.jp

3.サーバを再起動する

% sudo reboot

Apache の起動が失敗するトラブルってあんまり遭遇したことがなくて、正直ちょっと焦りました。

*1:メッセージ中のホスト名は変更している

2011-12-19

[]Apache を同一サーバ上で複数プロセス起動するときに注意する点

Apache を同一サーバ上で、複数プロセスを起動させる需要がそもそもあるのかっていうのはあるけど、Apache をリバースプロキシとして使って、同一ホストで mod_perl や mod_php をアプリケーションサーバとして動作させたい等があると思う。

以下の事を気を付けることで、複数のプロセス起動することができる。

  • コンフィグファイルを分ける
  • Listen IPアドレス or ポート番号を別にする
  • PIDファイルを別にする

コンフィグファイルを分ける

Apache は起動時に読み込むコンフィグファイルを指定することができる。これにより、設定の異なる Apache を複数起動することが出来る。

apachectl の -f オプションを使えば読み込むコンフィグファイルを指定することができる。

% sudo /usr/local/apache2/bin/apachectl -f コンフィグファイル -k 実行したいコマンド
% sudo /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf2/httpd.conf -k start

Listen IPアドレス or ポート番号を別にする

Listen する IPアドレスかポート番号を別にする必要がある。同一 IPアドレス且つポート番号で Listen する設定にしていた場合は、起動時に以下の様なエラーが出る。

(98)Address already in use: make_sock: could not bind to address 192.168.150.128:80
no listening sockets available, shutting down
Unable to open logs

PIDファイルを別にする

Apache を別プロセスとして起動する場合には、プロセスID を別に記録(管理)する必要がある。PIDファイルを同一にしていると、別のプロセスを起動時に以下の様なエラーが出る。

httpd (pid 18512) already running

すでにそのプロセスは起動しているから当たり前のこと。

変更するには、PidFile ディレクティブで指定するPIDファイルを別名にするだけでよい。ディレクトリ自体を分けてしまうのが間違いがなく楽でいいと思う。ただし、所有者やパーミッションには気をつけること。

まとめ

以上の事を気を付ければ、Apache を別プロセスで起動させることが出来る。perl なら nginx + Starman という組み合わせもあるだろうし、正直需要があるかどうかは分からないけど、こういった事も出来るというメモを兼ねて。