mod_so - Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache モジュール mod_so

翻訳済み言語: en |
fr |
ja |
ko |
tr

この日本語訳はすでに古くなっている
可能性があります。
最近更新された内容を見るには英語版をご覧下さい。

説明: 起動時や再起動時に実行コードとモジュールをサーバにロードする
ステータス: Extension
モジュール識別子: so_module
ソースファイル: mod_so.c
互換性: このモジュールは Window では (常に含まれている) Base
モジュールです

### 概要

いくつかのオペレーティングシステムでは、サーバの再コンパイルをする代わりに、
このモジュールを使用して
動的共有オブジェクト
(DSO) 機構により、実行時に Apache HTTP Server にモジュールを読み込ませることが
できます。

Unix 上では、読み込まれるコードは通常は共有オブジェクトファイル
(普通 .so という拡張子が付いています) からです。
Windows 上ではこのモジュールの拡張子は .so か .dll
です。

### 警告

Apache HTTP Server のあるメジャーバージョン向けにビルドされたモジュールは一般に
他のメジャーバージョンでは動きません。(例えば 1.3 と 2.0、 2.0 と 2.2)
またメジャーバージョン間ではAPIの変更がしばしば発生し、そのため新しい
メジャーバージョン向けにモジュールの修正が必要になることがあります。

### トピック

Windows 用のロード可能なモジュールを作成する

### ディレクティブ

LoadFile
LoadModule

### Bugfix checklist

httpd changelog
Known issues
Report a bug

### 参照

コメント

## Windows 用のロード可能なモジュールを作成する

### 注

Windows において動的にロードされるモジュールの拡張子は普通 .dll
ですが、Apache httpd のモジュールは mod_whatever.so
といった名前を持ちます。これは、他のプラットフォームでの通常の形式に
あわせたものです。しかしながら、サードパーティ製モジュール、例えばPHPなど、
は今でも .dll の拡張子を使っています。

まだ mod_so で ApacheModuleFoo.dll という名前の
モジュールもロードされますが、新しい名前の付け方を使う方が好まれます。
モジュールを 2.0 用に移植しているのであれば、2.0 の習慣に合うように名前を
修正してください。

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

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

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

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

module foo_module;

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

module AP_MODULE_DECLARE_DATA foo_module;

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

さあ、あなたのモジュールの DLL を作成しましょう。これを、
libhttpd.lib 共有ライブラリがコンパイルされたときに作成された
ibhttpd.lib エクスポートライブラリとリンクしてください。この時に、
Apache httpd のヘッダファイルが正しい位置にあるように、
コンパイラの設定を変える必要があるかもしれません。
このライブラリはサーバルートの modules ディレクトリにあります。
ビルド環境が正しく設定されるように、既存のモジュール用の .dsp を
取ってくるのが一番良いでしょう。もしくは、あなたの .dsp と
コンパイラとリンクのオプションを比較する、というものでも良いです。

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

## LoadFile ディレクティブ

説明: 指定されたオブジェクトファイルやライブラリをリンクする
構文: LoadFile filename [filename] ...
コンテキスト: サーバ設定ファイル, バーチャルホスト
ステータス: Extension
モジュール: mod_so

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

例:

LoadFile libexec/libxmlparse.so

## LoadModule ディレクティブ

説明: オブジェクトファイルやライブラリをリンクし、使用モジュールの
リストに追加する
構文: LoadModule module filename
コンテキスト: サーバ設定ファイル, バーチャルホスト
ステータス: Extension
モジュール: mod_so

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

LoadModule status_module modules/mod_status.so

これは ServerRoot の modules サブディレクトリから指定された名前の
モジュールをロードします。

翻訳済み言語: en |
fr |
ja |
ko |
tr

## コメント

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.