[FrontPage] 更新履歴 - サイトマップ - "ApacheModuleOrder" 配下のコンテンツ - 過去を発掘 | [Snap.Shot]

to FrontPage ApacheModuleOrder

(Mon, 20 Nov 2006 21:22:28 GMT+9)

おことわり

(2006-11-20 takano) この話(に限らず、このZWikiに存在するApache関連のドキュメント)は、 とくに断り書きの無い限り、apache-1.3ベースのものです。

apache-2.0およびapache-2.2においては、同じであるものもあるかもしれないし、 そうでないものもあるかもしれませんが、整理しておりませんので悪しからず。

Apacheモジュールの読み込み順

ええと、標準モジュールを使っているうちはあまり気にならない点ではありますが、私みたいに 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では付けてくれなかったので、たぶんこの間のどれかで改良があったんだと思うけど、 いつかは不明である。

apache2の罠

(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) なんだとか、とかね。

  HelpPage メールでコメント

© 2000-2013 Yukimasa TAKANO, all RIGHTs reserved.