2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Delphi】WebBroker のための Apache HTTP Server 導入 (Windows)

Last updated at Posted at 2025-08-28

はじめに

WebBroker の記事を書きましたが、Apache HTTP Server のインストールや設定方法は DocWiki にも詳細が (多分) ないので、記事にしてみました。

Apache HTTP Server のインストールと設定

以下、Delphi で作った CGI や Apache モジュール (共有オブジェクト) を動かせるようにするための基本的な設定です。

See also:

■ Apache HTTP Server (Windows) のインストール

Apache HTTP Server はソースコードの形態で提供されているため、Windows 向けの実行形式ファイル一式は Apache Lounge からダウンロードします。

image.png

インストール

ZIP をダウンロードしたらアーカイバで解凍し C:\Apache24 へ展開します。

デフォルトのフォルダ以外にインストールしたい場合には conf サブフォルダにある httpd.conf ファイルを書き替える必要があります。

/conf/httpd.conf
Define SRVROOT "c:/Apache24"

■ Web サーバーの開始と終了

Web サーバーを起動するには、コマンドプロンプトで \bin\httpd.exe を実行します。Explorer からダブルクリックでも大丈夫です。

正しく動作していれば http://localhost をブラウザで開いた時に

image.png

と表示されます。コマンドプロンプトを閉じると Web サーバーは終了します。

C:\Apache24\htdocs フォルダが静的ページのルートディレクトリ (/) となります。

Apache をサービスで起動

Apache HTTP Server をサービスで起動するようにするには、管理者権限のコマンドプロンプトで次のように入力します。

インストール
httpd.exe -k install

実際に実行すると次のような表示になります。

C:\Apache24\bin>httpd.exe -k install
Installing the 'Apache2.4' service
The 'Apache2.4' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.

アンインストールは次のように入力します。

アンインストール
httpd.exe -k uninstall

Apache サービスの操作

サービスで起動された Web サーバーはコントロールパネルの [サービス] から開始 / 停止 / 再起動が行えます。サービス名は Apache2.4 です。

image.png

[サービス] は [ファイル名を指定して実行] (〔Win〕+〔R〕) から services.msc を実行すると素早く開けます。

image.png

Apache サービスの開始 / 停止 / 再起動はコマンドプロンプトからも行えます (要管理者権限)。

開始
httpd.exe -k start
終了
httpd.exe -k stop
再起動
httpd.exe -k restart

■ CGI や Apache モジュール (共有オブジェクト) を使うための設定

CGI の設定は特に必要ありませんが、デフォルトのままだと cgi-bin フォルダでしか動作しません。これを変更するには conf サブフォルダにある httpd.conf ファイルを書き替える必要があります。

Apache モジュール (共有オブジェクト) を使うには conf サブフォルダにある httpd.conf ファイルを書き替える必要があります。これに関しては後述します。

httpd.conf を書き替えたら、Web サーバーを再起動する必要があります。

■ CGI モジュールのテスト

Delphi で作った CGI モジュール (*.exe) を実フォルダ C:\Apache24\cgi-bin\ に吐くようにするか、モジュールをコピーし、http://localhost/cgi-bin/<CGI モジュール名> をブラウザで開きます。

64bit サーバーでは 32bit / 64bit CGI モジュールいずれも動作します。

■ Apache モジュール (共有オブジェクト) のテスト

まずは Apache モジュール (共有オブジェクト) についての説明が必要です。

32bit Web サーバーには 32bit の Apache モジュール (共有オブジェクト) が、64bit Web サーバーには 64bit の Apache モジュールが必要です。

・モジュール名とハンドラ名の命名規則

Apache モジュール (共有オブジェクト) のプロジェクトファイルのソースが次のようになっていたとします。

library mod_webbroker;

...

var
  GModuleData: TApacheModuleData;
exports
  GModuleData name 'webbroker_module'; // モジュール名は任意に変更可能

begin
{$IFDEF MSWINDOWS}
  CoInitFlags := COINIT_MULTITHREADED;
{$ENDIF}
  Web.ApacheApp.InitApplication(@GModuleData);
  Application.Initialize;
  Application.WebModuleClass := WebModuleClass;
  Application.Run;
end.

この時、各名称は次のようになっています:

項目 名称
プロジェクト名 mod_webbroker
モジュールファイル名 mod_webbroker.dll
モジュール名 webbroker_module
ハンドラ名 mod_webbroker-handler

モジュール名はウィザードでの新規作成時に決めた名前になっていますが、mod_webbroker_module のように プロジェクト名 + '_module' にしておいた方が判りやすいと思います。

image.png

ハンドラ名はデフォルトだと プロジェクト名 + '-handler' という名前になっていますが、InitApplication() の 2 番目のパラメータで変更する事ができます。

  Web.ApacheApp.InitApplication(@GModuleData, 'webbroker-handler');

古い Delphi ではやり方が違うので注意が必要です。

項目 古い Delphi 新しい Delphi
モジュール名
(デフォルト)
ModuleName グローバル変数
(プロジェクト名 + '_module')
GModuleData グローバル変数
(ウィザードで入力したモジュール名)
ハンドラ名
(デフォルト)
ContentType グローバル変数
 または
Handler グローバル変数
(プロジェクト名 + '-handler')
InitApplication() 第 2 パラメータ
(プロジェクト名 + '-handler')

・Apache モジュール (共有オブジェクト) を使う

conf サブフォルダにある httpd.conf ファイルに設定を追加する必要があります。

まずはロードするモジュールを記述します。

httpd.conf
LoadModule <モジュール名> modules/<モジュールファイル名 (*.dll)>

次に仮想フォルダとハンドラを関連付けます。

httpd.conf
 <Location /<仮想フォルダ>>
    SetHandler <ハンドラ名>
 </Location>

上記例だと、次のような記述になります (仮想フォルダは xyz):

httpd.conf
LoadModule webbroker_module modules/mod_webbroker.dll

<Location /xyz>
  SetHandler mod_webbroker-handler
</Location>

・動作確認

Delphi で作った Apache モジュール (*.dll) を実フォルダ C:\Apache24\modules に吐くようにするか、モジュールをコピーした上で、conf サブフォルダにある httpd.conf ファイルを書き替えます。

この設定を行うと、http://localhost/<指定した仮想フォルダ> で Web アプリケーションを実行できます。

■ ISAPI モジュールを Apache で使う

Windows 用 Apache では、IIS (Internet Information Services) 用の ISAPI モジュールを利用する事もできます。

32bit Web サーバーには 32bit の ISAPI モジュールが、64bit Web サーバーには 64bit の ISAPI モジュールが必要です。

・mod_isapi モジュールを有効にする

ISAPI モジュールを使うには mod_isapi モジュールを有効にする必要があります。

1. mod_isapi.so の記述のある行を探し、先頭に # があってコメントアウトされていれば外します。

http.conf
LoadModule isapi_module modules/mod_isapi.so

2. <IfModule alias_module> セクションを探し、最後に以下の行を加えます。

  ScriptAlias /isapi/ "${SRVROOT}/isapi/"

cgi-bin 同様、実フォルダ C:\Apache24\isapi\ に置かれた ISAPI モジュールを http://localhost/isapi/<ISAPI モジュール名> でアクセスできるようにします。

http.conf
<IfModule alias_module>
  ...
  ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
  ScriptAlias /isapi/ "${SRVROOT}/isapi/"
</IfModule>

3. <Directory "${SRVROOT}/cgi-bin"> セクションを探し、これを丸ごとコピーして ISAPI 用のセクションを作ります。Options の設定だけが異なります。

<Directory "${SRVROOT}/isapi">
    AllowOverride None
    Options ExecCGI
    Require all granted
</Directory>

以下のようになります。

http.conf
#
# "${SRVROOT}/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<Directory "${SRVROOT}/isapi">
    AllowOverride None
    Options ExecCGI
    Require all granted
</Directory>

4. <IfModule mime_module> セクションを探し、次の項目がなければ追加します。

    AddHandler isapi-handler .dll

以下のようになります。

http.conf
<IfModule mime_module>

...
    
    AddHandler isapi-handler .dll
</IfModule> 

5. http.conf の末尾に、mod_isapi のための各種ディレクティブを記述します。

http.conf
ISAPIAppendLogToErrors on

See also:

・動作確認

Delphi で作った ISAPI モジュール (*.dll) を実フォルダ C:\Apache24\isapi\ に吐くようにするか、モジュールをコピーし、http://localhost/isapi/<ISAPI モジュール名> をブラウザで開きます。

このままですと、ISAPI モジュールは呼び出し毎にロード / アンロードされるため効率がよくありません。ISAPI モジュールをサーバー起動時にロードし、終了時にアンロードするためには ISAPICacheFile ディレクティブで ISAPI モジュールを指定します。

例:
ISAPICacheFile isapi/mod_webbroker.dll

ただ、Apache HTTP Server で無理に ISAPI モジュールを使う必要はないかと思います。Delphi で Apache モジュール (共有オブジェクト) 向けにプロジェクトを作ってビルドすればいいだけですし、そちらの方がパフォーマンスも良好です。

おわりに

簡単に Apache HTTP Server のインストール方法と設定を紹介してみました。Delphi の関連書籍にも Apache HTTP Server の設定方法が載っていたりするのですが、多くの場合バージョンが古く現在のものとは設定方法が異なっています。

Linux 向けに「WebBroker のための Apache HTTP Server 導入 (Linux)」なんて記事をあえて書く必要はないかと思っています。

  • Linux (x64) プラットフォーム向けにビルド
  • *.dll*.so で読み替え
  • Linux 版 Apache HTTP Server に mod_ispi モジュールは存在しない (ISAPI モジュールは動作しない)

http.conf の書き方は同じなので、ちょっと読み替えればいいだけですしね。

書き忘れがあったら後で追記します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?