mongrel-apacheの連携設定

MacOSX10.5上でMongrelApacheに連携させるよう設定してみました。
とりあらえず、バランサーとかプロキシーは考えず、単純にApacheからmongrelへRewriteする設定を行いました。

Mongrel を起動

> mongrel_rails start -p <待ち受けポート> -r <アプリケーションのパス> -d

具体的には、railsのアプリケーションのルートの位置から以下のように実行しました。

> mongrel_rails start -p 3000 -r ./ -d

apacheのrewrite設定

VirtualHostへの接続をmongresの接続へとrewriteするよう設定しました。
MacOSX10.5には、mod_rewriteが標準で含まれているのでapacheの設定ファイルでVirtualHostへの接続をmongresの接続へとrewriteするよう設定しました。
MacOSXの場合、 /etc/apache2/users/.confという名前の設定ファイルが読み込まれるのでそこに設定を行いました。
今回具体的には「192.168.24.32」というIPアドレスで「pankiti.goronyan.as.wakwak.ne.jp」というホスト名をもつ環境を対象にしました(ホスト名は/etc/hostsに設定しました)。

NameVirtualHost 192.168.24.32

<VirtualHost pankiti.goronyan.as.wakwak.ne.jp>

  ServerName pankiti.goronyan.as.wakwak.ne.jp
  ServerAdmin nyaago@goronyan.as.wakwak.ne.jp
  DocumentRoot /Users/nyaago/workspace/cart/public

  <IfModule mod_rewrite.c>
    RewriteRule ^/$ index.html [QSA]
    RewriteEngine on
    # 通常ファイル以外をMongrelのurlへrewriter
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ http://localhost:3000%{REQUEST_URI} [P,QSA,L]
  </IfModule>
</VirtualHost>

通常ファイル以外がmongrelのurlにrewriterされるよう設定しました。

    1. 「RewriteEngine on」でrewriteを有効にしています。
    2. 「RewriteCond <ファイルパターン> !-f 」のかたちで、通常ファイル以外で次のRuleが適用されるようにしています。-fが通常ファイルであることを示し。「!」が否定式です。
    3. 画像ファイルなど通常ファイルは「DocumentRoot 」というかたちで設定したPath以下のファイルが読み込まれます。
    4. RewriteRuleで指定しているQSAフラグは、入力URLに含まれていたクエリ文字列が変換後のURLにも付加されるようにすることらしいです。(参考 http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%20-%20QSA%A5%D5%A5%E9%A5%B0)
    5. Lフラグは、そのRuleが適当されれば、それ以後のRuleの適用をしなくするためのものです。(参考 http://www.widexl.com/tutorials/mod_rewrite.html)
    6. PフラグはPloxyに関するものですが、理解していません。また、しらべよう...

apacheを起動

アクセス

これで「VirtualHost」で設定したurl

(今回はブラウザから「http://pankiti.goronyan.as.wakwak.ne.jp/」)にアクセスするとrailsアプリに接続されます。