Apache 2.x モジュール mod_cgidso

特徴

普通の CGI は実行ファイルを fork(), exec() して呼び出しますが, このモジュールでは共有オブジェクトを dlopen(), dlsym() して呼び出します. 構造的には,Apache モジュールのうちコンテンツ出力部分を分離して別ファイルとし, httpd との接続部分をこのモジュールが受け持つ形になっています.

といったメリットがあります.

# 本来の意味での CGI とは異なるので,モジュール名に "cgi" と入っているのは おかしいと言えばおかしいのですが,そこはあまり深く考えないように......

このモジュールはマルチスレッド MPM に対応しています.

2ch CGI 軽量化レンタルサーバ BIG-server.com オプションサービス で利用して頂いています ★

ハンドラ

dso-script

このハンドラが割り当てられたファイルがリクエストされると, そのファイルはこのモジュールによって処理されます.

使用例:

<IfModule mod_cgidso.c>
    AddHandler dso-script so
</IfModule>

このモジュールから呼び出される共有オブジェクトのソースの例: dso-example.c

共有オブジェクトのビルドには apxs を使うのが最も簡単です.

apxs -c source.c [source2.c source3.c ...]

により .libs/source.so が生成されます.

このモジュールから呼び出される共有オブジェクトに関する注意点

  • 普通の CGI と異なり,httpd プロセスと同一メモリ空間で実行され, 処理終了時にプロセスは終了しません.標準 C 関数などを使用する場合 明示的にリソース解放を行わないと,どんどんリークしていきます. できるだけ APR 関数の使用をお勧めします.APR 関数を使用すれば 処理終了時のリソース解放が自動的に行われます.もし APR 関数のことを よく知らないなら,Apache Portable Runtime Documentation を参照して下さい.あるいは,Apache のヘッダファイルもヒントになるでしょう.

    apxs -q INCLUDEDIR

    によりヘッダファイルのあるディレクトリを調べられます.
  • exit() は使用しないで下さい.使用すると httpd プロセスごと終了してしまいます.
  • マルチスレッド MPM で使用する場合,共有オブジェクトも thread-safe でなければなりません. thread safety に関しては以下を参照して下さい.

サーバ負荷対策 Tips

CGI 出力キャッシュで述べているように,mod_mem_cache の利用は負荷軽減にはかなり効果的です.

Apache 2.2 では mod_proxy_balancer というロードバランサ・負荷分散モジュールも実装されています. また,mod_cache / mod_proxy なども 2.0 までのものよりかなり改良されています. さらに,Event MPM という Keep Alive 時の負荷軽減を図った MPM も実装されています.

ダウンロード

mod_cgidso.c size: 6.3Kbytes 更新: 2005-02-01 09:02:02 PST
このモジュールは Apache License, Version 2.0 に基づき提供します.