[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

mod_so モジュール

このモジュールは、サーバの起動時や再起動時に実行コードと モジュールをサーバに読み込む機能を提供します。

ステータス: Base (Windows); Experimental (Unix)
ソースファイル: mod_so.c
モジュール識別子: so_module
互換性: Apache 1.3 以降で使用可能。

概要

これは実験的なモジュールです。 オペレーティングシステムによっては、サーバの再コンパイルをする代わりに、 Dynamic Shared Object (DSO) 機構により、実行時に Apache にモジュールを読み込む、ということを 行なうためにこのモジュールを使用することができます。

Unix 上では、読み込まれるコードは通常はシェアードオブジェクトファイル (普通 .so という拡張子が付いています) からです。 一方、Windows 上ではこのモジュールは DLL ファイルを読み込みます。このモジュールは Apache 1.3 以降のみで使用可能です。

以前のリリースでは、このモジュールの機能は Unix では mod_dld、 Windows では mod_dll により提供されていました。Windows では、 mod_dll は 1.3b1 から 1.3b5 までのベータリリースで使用されていました。 mod_so はすべてのオペレーティングシステム用に、 この二つのモジュールを一つのモジュールにまとめたものです。

ディレクティブ

Windows 用の DLL モジュールを作成する

Apache のモジュール API は UNIX と Windows とで変更されていません。 多くのモジュールは全く変更なし、もしくは簡単な変更により Windows で実行できるようになります。ただし、それ以外の Windows には無い Unix アーキテクチャーの機能に依存したモジュールは動作しません。

モジュールが実際に動作するときは、 二つの方法のどちらかでサーバに追加することができます。まず、Unix と同様にサーバにコンパイルして組み込むことができます。Windows 用の Apache は Unix 用の Apache にある Configure プログラムがありませんので、モジュールのソースファイルを ApacheCore プロジェクトファイルに追加し、シンボルを os\win32\modules.c ファイルに追加する必要があります。

二つ目はモジュールを DLL としてコンパイルする方法です。 DLL はシェアードライブラリで、実行時に LoadModule ディレクティブによりサーバに読み込むことができます。これらのモジュール DLL は配布することが可能で、サーバを再コンパイルすることなく、Windows 用の Apache のすべてのインストールで実行することができます。

モジュール DLL を作成するためには、 モジュールの作成に小さな変更を行なう必要があります。 つまり、モジュールのレコードが DLL (これは後で作成されます。 以下を参照してください) からエクスポートされなければなりません。 これを行なうには、MODULE_VAR_EXPORT (Apache のヘッダファイルで定義されています) をモジュールのモジュールレコード 定義の部分に追加してください。たとえば、モジュールに

    module foo_module;

があるとすると、それを次のもので置き換えてください。

    module MODULE_VAR_EXPORT foo_module;

もし Unix 上でこのモジュールを使用したくなっても、 変更無しで使い続けられるように、このマクロは Windows 上でのみ効力を持つということに注意してください。.DEF ファイルの方を良く知っているという場合は、 代わりにそれを使ってモジュールレコードを エクスポートすることもできます。

ここで、あなたのモジュールの DLL を作成してください。これを、 ApacheCore.dll シェアードライブラリがコンパイルされたときに作成された ApacheCore.lib エクスポートライブラリとリンクしてください。この時に、 Apache のヘッダファイルが正しい位置にあるように、 コンパイラの設定を変える必要があるかもしれません。

これで DLL 版のモジュールが作成されているはずです。 さあ、サーバルートの modules ディレクトリにモジュールを置いて、LoadModule ディレクティブを使って読み込んでください。


LoadFile ディレクティブ

構文: LoadFile filename [filename] ...
コンテキスト: サーバ設定ファイル
ステータス: Base
モジュール: mod_so

LoadFile ディレクティブは、サーバが起動されたときや再起動されたときに、 指定されたオブジェクトファイルやライブラリをリンクします。 これはモジュールが動作するために必要になるかもしれない追加の コードを読み込むために使用されます。Filename は絶対パスか、ServerRoot からの相対パスです。

例:

LoadFile libexec/libxmlparse.so

LoadModule ディレクティブ

構文: LoadModule module filename
コンテキスト:サーバ設定ファイル
ステータス: Base
モジュール: mod_so

LoadModule ディレクティブは filename というオブジェクトファイルおよびライブラリをリンクし、module という名前のモジュールの構造をアクティブなモジュールのリストに追加します。 Module はファイル中の module 型の外部変数の名前で、モジュールのドキュメントに モジュール識別子として書かれているものです。例 (Unix と Apache 1.3.15 以降の Windows):

LoadModule status_module modules/mod_status.so

例 (Apache 1.3.15 以前の Windows, サードパーティモジュールの一部):

LoadModule foo_module modules/ApacheModuleFoo.dll

Apache 1.3.15 の時点で Apache Win32 バイナリ配布に付属している すべてのモジュールの名前が変更されたことに注意してください

Win32 Apache モジュールはしばしば古い形式の名前で配布されることがあり、 libfoo.dll のような名前で配布されたりすることさえあります。 モジュールの名前に関係なく、LoadModule ディレクティブは正確なファイル名を要求します。 ファイル名の拡張子に関しては何の仮定も行ないません。


Apache HTTP Server Version 1.3

Index Home

参照: AddModuleClearModuleList