09

mod_caucho

Apache(Web) + Resin(App) な構成を作ろうとしてしばらく四苦八苦したので記録しておく。

Apache と Resin を連携させるには Apacheにmod_cauchoというモジュールをインストールする必要がある。予めApacheがインストールされていて、apxsが使える状態になっていればさして難しくはない。

ちなみにドキュメントは http://www.caucho.com/ からDocumentationのページにいって、Resin 4.0 Documentation のリンクをクリックして行ける先。なぜかGoogleではこのページはなかなか引っかからない。Googleで出てきたとしてもVersion 3.xなのでなかなか到達しづらい。

Apacheへのmod_cauchoのインストールはだいたいこのあたり http://www.caucho.com/resin-4.0/admin/starting-resin-apache.xtp

mod_cauchoを入れる前にStandaloneサーバ運用を検討しろとあるのだけど、どうなんだろ。resinがwebをappの前段のwebとして処理できるんならOKなんだけど、そうじゃないならintra-mart Accel platform上では若干パフォーマンス不安がある。というのは、ほぼすべてのリクエストをルーターがさばくようになっているため、静的コンテンツ処理に関してはできればWebサーバ側で返しておいて、可能な限りルーティング以降の負荷を下げたい。Standaloneでこれが可能なのなら良いのだけど、この辺あまり突っ込んで調べられていない。

でapxsが入っていれば手順通り設定すれば終わり何だけど、今回はmod_cauchoがresin側のポート(ResinConfigServerで指定しているポート)と通信できないらしくて困った。 mod_cauchoを有効にしてApacheを立ち上げると何をやっても503 Server Temporary Unavailableとしか返してこない。いろいろ試してみたんだけど、これは ほぼmod_cauchoがresinと通信できていないということっぽい。mod_cauchoは指定のポートを使ってresinと通信するらしいのだけど、このポートは当然ファイアウォールなどでブロックしていてはいけないので開けておく必要がある。しかし、iptablesを止めても変化が無いし、該当ポートに接続してみるとつながりはするので全く遮断されてしまっているという雰囲気でもない。mod_caucho側の問題と疑ってみた物の打開策も思いつかず。 何が起こっているかはapacheやresinのログからは一切分からないのだけど、あるとき/var/logをあさって見るとselinuxが止めているらしきログが出力されているのが分かった。selinuxのポリシーなんてまじめに触った事無かったんだけど、以下を参考に該当の操作が通るようにしてみた。

http://d.hatena.ne.jp/toshokan3210/searchdiary?word=%2A%5BSELinux%5D

該当のポリシーを設定し直すと、ちゃんと動くようにった。めでたし、めでたし。selinuxが阻害しているかも、というのはぼんやりと可能性を疑ってはいた物の、なんとなく手が出なくて随分時間を無駄にしてしまった。

というわけで困ったらログをちゃんと調べましょう、というお話でした。(まあ、調べても全く解決しない場合もないではない)

といいながら話はここでは終わっていなくて、静的コンテンツがちゃんとWebサーバ側でさばけているか、というと、実際やってみるとダメで、ファイルがどっちにあるかでうまい事判断してくれるのかなと思っていたら、そういう判断は勝手にはやってくれない。

公式のBlogによればmod_rewirteでがんばっている、と言う事になっている。 http://www.intra-mart.jp/developer/blog/entry/2013/02/003948.html

そういう事なら仕方ない。こっちでもがんばるか、という感じ。

しかしあれかな。resinにはmod_rewrite的な機能もあるみたいなので、やはり mod_caucho やめてStandaloneでの運用を検討すべきかな。 http://www.caucho.com/resin-4.0/admin/http-rewrite.xtp

・・・ってここまで書いてから気づいたけど、そもそもiAPではmod_cauchoでやるべきではないんだね。はああ。