Apache 2.x モジュール mod_cgidso
特徴
普通の CGI は実行ファイルを fork(), exec() して呼び出しますが, このモジュールでは共有オブジェクトを dlopen(), dlsym() して呼び出します. 構造的には,Apache モジュールのうちコンテンツ出力部分を分離して別ファイルとし, httpd との接続部分をこのモジュールが受け持つ形になっています.
- 普通の CGI のようなプロセス生成のオーバヘッドが発生せず,サーバ負荷軽減につながる.
- CGI をそのまま Apache モジュールに置き換えた場合,プログラムの 追加や変更の度に httpd の再起動が必要となるが,このモジュールを用いれば 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 に関しては以下を参照して下さい.
- 普通の CGI と異なり,httpd プロセスと同一メモリ空間で実行され,
処理終了時にプロセスは終了しません.標準 C 関数などを使用する場合
明示的にリソース解放を行わないと,どんどんリークしていきます.
できるだけ APR 関数の使用をお勧めします.APR 関数を使用すれば
処理終了時のリソース解放が自動的に行われます.もし APR 関数のことを
よく知らないなら,Apache Portable Runtime Documentation
を参照して下さい.あるいは,Apache のヘッダファイルもヒントになるでしょう.
サーバ負荷対策 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-02 02:02:02 JST
- このモジュールは Apache License, Version 2.0 に基づき提供します.