[FrontPage] | 更新履歴 - サイトマップ - "ApacheModuleOrder" 配下のコンテンツ - 過去を発掘 | [Snap.Shot] |
ApacheModuleOrder |
(2006-11-20 takano) この話(に限らず、このZWikiに存在するApache関連のドキュメント)は、 とくに断り書きの無い限り、apache-1.3ベースのものです。
apache-2.0およびapache-2.2においては、同じであるものもあるかもしれないし、 そうでないものもあるかもしれませんが、整理しておりませんので悪しからず。
ええと、標準モジュールを使っているうちはあまり気にならない点ではありますが、私みたいに mod_fastcgi やら mod_gzip やら ModThrottle やらといった、怪しげなサードパーティモジュールを多用していると、この「順番」が予期しない事態を招いてくれたりする。
基本ルールは「後からAddModuleしたものが上にかぶさる」である。 たとえば:
AddModule mod_fastcgi.c AddModule mod_gzip.c AddModule mod_throttle.c
とconfに記述すると、 こんな感じになる(はず):
外 ↓ HTTP mod_throttle ↓ mod_gzip ↓ mod_fastcgi.c ↓ apache core
この順番を間違っちゃうと面倒かもしれない。たとえば、mod_throttleのあとにmod_fastcgiを追加しちゃったりすると、fastcgi経由のコンテンツだけ、mod_throttleの管理外になってしまう(たぶん)。これを逆手にとると、mod_gzipの後にmod_includeなんか入れちゃって、SSIページは圧縮されないようにもできる(かも)。でもこれはあんまり意味なさそうだな。
これはClearModuleListディレクティブなんぞを使って、モジュールの読み込み順を明示的にやってやると分かりやすいと思う。ちとアタマ抱えてしまうのは、全部shared object(もしくはDLL)にせず、本体に組み込んじゃってる場合。これは試したことないんだけど、configure時の--activate-moduleの順序によるんじゃないかと思う。もしダメっぽかったら素直にClearModuleListして、明示的に順序を指定したほうが確実かもしれない。
…と思っていたのだけど、なんか挙動違うっす。mod_proxy+mod_gzip。 なんでこういう解釈してたんだろう。おかしいなぁ。
mooyaさん曰く、こんなんあるそうです。
http://mooya.ath.cx/CubeDeZope/1011192288
http://lists.zope.org/pipermail/zope/2001-November/104676.html
そうか、上の記述で間違っているのは、mod_gzip_item_include handlerの件 (とくにproxy-handler)が抜けているからか。
(2002-4-3) module orderについて言及している、こんな記事があった。
http://take23.org/docs/guide/scenario.xml/8
これを見ていると、独自モジュールである mod_proxy_add_forward.c
は、 mod_proxy.c
より前にしろ、とある。
そうすれば mod_proxy.c
の 後に mod_proxy_add_forward.c
を呼びにいく(つまり逆順である)とのこと。
↑に今まで書いてきたのと同じ記述、はじめてみつけたよ…ホッ。
ちなみにX-Forwardrd-Forヘッダは、apache-1.3.23では既に標準装備なので、ここにある mod_proxy_add_forward.c
なんてモジュールは不要になった。
apache-1.3.19では付けてくれなかったので、たぶんこの間のどれかで改良があったんだと思うけど、
いつかは不明である。
(2003-03-19 takano)
AddHandler
, SetHandler
を駆使してトリッキーな設定をしている人は注意(って俺だけだって)。
apache1とapache2ではdefault-handlerの挙動が変わった。apache1のdefault-handlerってのは、
通常時(何もしない設定)に戻してくれる設定なんだけど、これをapache2でやると面倒なことに。
apache2でのdefault-handler(CORE)ってのは、ホントになんにもしない素のハンドラらしいのだ。
具体的に例を示すと:
<Location /> SetHandler fastcgi-script </Location> <Location /subdir/> SetHandler default-handler </Location>
こんなんやって、subdirディレクトリをstaticにserveしようとするとエラー。 なんでかというと、autoindex処理もハンドラの一種になるんだそうな…(がーん)。
単に上位ディレクトリのハンドラをキャンセルしたいのであれば、 SetHandler None
としろとのこと。
うへー、まいった。
apache2の新ハンドラと新フィルタは、いまだに把握しきれてないな。 apache1のmod_gzipみたいなのは、透過時に単に圧縮するだけだからフィルタ (mod_deflate) なんだとか、とかね。