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 という組み合わせもあるだろうし、正直需要があるかどうかは分からないけど、こういった事も出来るというメモを兼ねて。