RewriteLogとRewriteLogLevelがない。
mod_rewrite – Apache HTTP Server
This functionality has been completely replaced by the new per-module logging configuration mentioned above.
あーそうなの。ということで、
LogLevel alert rewrite:trace3
mod_rewrite – Apache HTTP Server
This functionality has been completely replaced by the new per-module logging configuration mentioned above.
あーそうなの。ということで、
LogLevel alert rewrite:trace3
正しくは、500を返す。
render :nothing => true, :status => 450
なんてことをしていて、Mongrelの開発環境だとちゃんと450が返ってくるのにApache+Passengerの検証環境だと500が返ってきていた。
そこで原因を調べたところ、返す可能性のあるステータスコードはすべて定義されていて、それ以外は500で返している。(※ソースは後述)
で、なんでこんなことをしようとしているのか。Flashのアップローダを作ってFileReference#upload()でアップロードしているのだけれど、こいつが結果をHTTPステータスでしか受け取れない。だから、結果のメッセージをサーバから返してそれを表示する、てこともできない。
アップロード自体が成功したか否かを知るには200かそれ以外か、くらいで十分なんだけれど、アプリ要件(たとえば、アップロードが終わってからファイルを受け付けられない状況になってただとか、ファイルの中身を見て判断しなきゃいけないだとか)での結果を返すには、これでは足りない。
結局、Apacheのソースコメントでunusedとなっていた418~421に意味を持たせ、そこを使って対応しました。層を混同していて気持ちがいいものではないのだけれど、影響範囲は広くなく、なんらかのフラグを立てて別リクエスト、のコスト増を考えるといいだろうとの判断。もしなにかいい方法があったら教えてください。
以下、Apacheソースの該当部分。
続きを読む…
SSL セキュアサーバではアクセス時に最初に SSL の認証シーケンスが走ります。しかし、その時点では Apache はアクセスしてきたホスト名が分からないため、証明書の交換は先頭のバーチャルホストのデータを元に行われます。従って、名前ベースのバーチャルホストでは、SSL は一つのバーチャルホストしか扱えません。
ってことを知らなくて、ハマった。確かにどのホスト名でアクセスしてもひとつめのドキュメントルートが表示されてた。
で、IPベースはというと・・・
Apache の IP ベースのバーチャルホストサポート – Apache HTTP サーバ
IP ベース という名前が示すように、サーバには IP ベースのバーチャルホストそれぞれにつき、別々の IP アドレスが 必要です。複数の物理コネクションを持っているマシンを用意するか、 最近のオペレーティングシステムでサポートされているバーチャル インタフェース (詳細はシステムの説明書を読んでください。たいていは “ip エイリアス” と呼ばれていて、設定には普通 “ifconfig” コマンドを 使います) を使うかで実現できます。
おーエイリアスでいいのか。こっちでいくか、外に出すものではないし。
突然Apacheが黙った。プロセスは生きてるっぽいけど画面真っ白。
error_logをみたらこんなのがいっぱい。
...
[Sat Sep 30 21:27:18 2006] [notice] child pid 27980 exit signal File size limit exceeded (25)
[Sat Sep 30 21:27:18 2006] [notice] child pid 27981 exit signal File size limit exceeded (25)
[Sat Sep 30 21:27:18 2006] [notice] child pid 27982 exit signal File size limit exceeded (25)
[Sat Sep 30 21:27:18 2006] [notice] child pid 27983 exit signal File size limit exceeded (25)
[Sat Sep 30 21:27:18 2006] [notice] child pid 27985 exit signal File size limit exceeded (25)
...
リミット?ってことでhttpd.confを確認してもそれらしきところはなく、ググってみたらApache-Usersのメーリングリストにレポートを発見。
http://mm.apache.or.jp/pipermail/apache-users/2005-February/005184.html
おーなるほど。で、
-rw-r--r-- 1 root root 2147483647 9月 30 21:00 rewrite_log
これか。mod_rewriteのRewriteLogLevelを最大にしていたのを忘れてた。
わりとどうでもいいサーバだからって放置にも限度があるだろ的な。というか、ぴったり2GBってところになぜか感心。
またひとつ賢くなった・・・のか?
分かってませんでしたシリーズ。
Apacheのconfigureオプションはenableとdisableがたくさんあって、デフォルトでどのモジュールが組み込まれるのかよく分かってませんでした。
そこで、このオプション。
# /usr/local/apache2/bin/httpd -l
組み込まれてるモジュールが一覧されます。
ちなみにApache 2.2.0のデフォルトはこちら↓
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
コレを見てconfigureすればイイジャン!・・・って、コンパイルしないと見られないか。鶏と卵。
The Apache Software Foundation and The Apache HTTP Server Project are pleased to announce the release of version 2.2.0 of the Apache HTTP Server (“Apache”).
Apache 2.2.0がリリースされました。
これで安定リリースのApacheを使ってもmod_proxy_ajp(+mod_proxy)でTomcatとつなげるようになりました。
んが、TomcatのサイトのコネクタFAQでは
mod_jk is great and should be used for production. It is getting fixes as needed (which is now rare).
mod_proxy_ajp. With apache 2.2, mod_proxy was rewritten to support load balancing as well as a new transport called mod_proxy_ajp. This module is distributed with the Apache http server, not the Tomcat server.
となってます。
うーん、ちゃんとメリット、デメリットを理解しないとな。