実践投入前の自分のメモもかねてのエントリー。 以前、複数の Catalyst(等) アプリの運用について「lighttpd いい」と書きましたが、 やっぱり apache+mod_perl の運用もありかなと思いました。 apache+mod_perl の場合、 プロセス管理が lighttp と比べてやりやすい&楽というのが理由です。 複数のアプリをサーブしたい場合でも、すごくシンプルに設定を記述できる ってのが lighttpd の利点のひとつですが、 apache も工夫をすれば、そこまで煩雑にならずに複数アプリを起動することができそうです。
方針としては、アプリごとに conf を書いて、ポート別に apache を起動、 フロントの 80番の apache がリバースプロキシ及び静的コンテンツ向けサーバになる、 というものです。 httpd のポートがたくさんできちゃうのが多少気持ち悪い感じしますが、 番号の管理だけちゃんとしてれば、まぁいいかなぁと思います。
一番最後に、運用も視野に入れた必要最小限の conf ファイルのサンプルを貼付けておきます。 myapp_httpd.conf を使う場合、
$ sudo apache2ctl -f myapp_httpd.conf
としてアプリ別に apache を起動しています。 テストマシンで試験してる段階ではこれで問題はないようです。 以下の例、myapp_httpd.conf の Global Settings に当たる部分は、 アプリケーション間で共通に使うことができるので、 別ファイルにして Include したほうが管理しやすくなりますね。 では conf ファイル。
myapp_httpd.conf
# Global Settings User www-data Group www-data Timeout 300 KeepAlive Off HostnameLookups Off LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog /var/log/apache2/access.log combined LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname Off RPAFproxy_ips 127.0.0.1 # Local Settings Listen 8001 PidFile /var/run/apache2/myapp.pid StartServers 1 MinSpareServers 1 MaxSpareServers 3 MaxClients 10 ErrorLog /var/log/apache2/error_myapp.log CustomLog /var/log/apache2/access_myapp.log combined DocumentRoot /home/www/myapp/root PerlSwitches -I/home/www/myapp/lib PerlSwitches -I/home/www/myapp/extlib PerlRequire /home/www/myapp/startup.pl SetHandler perl-script PerlHandler MyApp
次に front の apache の設定。VirtualHost 前提で、静的コンテンツに関しては Expires ヘッダを付加しています。
<VirtualHost *:80> ServerName myqpp DocumentRoot /home/www/myapp/root RewriteEngine On RewriteRule ^/(static/|favicon.ico) - [L] RewriteRule ^/(.*)$ http://localhost:8001/$1 [P,L] ExpiresActive On <FilesMatch "\.(jpg|gif|png|ico|css|js)$"> ExpiresDefault "access plus 365 days" </FilesMatch> </VirtualHost>
lighttpd と比べながら、実際に運用へ適応させようかと思っています。 何かおかしなところがあったらツッコミくださーい。