Apache module mod_so

### 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 はすべてのオペレーティングシステム用に、 この二つのモジュールを一つのモジュールにまとめたものです。

## ディレクティブ

- LoadFile
- LoadModule

## 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