Apache24 の httpd.conf で CGI を実行可能にする手順

Views: 0

1. 目的

Windows 11 上の Apache24 環境で、httpd.conf の設定により CGI を実行可能にする手順をまとめる。

本メモでは、次の 2 方式を扱う。

  • ScriptAliascgi-bin ディレクトリを CGI 専用として定義する方式

  • 任意ディレクトリに対して ExecCGIAddHandler を設定する方式

2. 前提

想定する配置例は次のとおり。

  • Apache24: C:\Apache24

  • 設定ファイル: C:\Apache24\conf\httpd.conf

  • CGI ディレクトリ: C:\Apache24\cgi-bin

Windows ではまず mod_cgi が有効であることを確認する。

3. 最小構成での有効化手順

3.1 mod_cgi を有効にする

httpd.conf で次の行が有効になっていることを確認する。

LoadModule cgi_module modules/mod_cgi.so

コメントアウトされている場合は、先頭の # を外す。

3.2 ScriptAlias で cgi-bin を定義する

最も分かりやすい方法は、cgi-bin を CGI 専用ディレクトリとして定義することである。

ScriptAlias /cgi-bin/ "C:/Apache24/cgi-bin/"

3.3 cgi-bin ディレクトリの実行許可を与える

あわせて、対象ディレクトリで CGI 実行を許可する。

<Directory "C:/Apache24/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    Require all granted
</Directory>

この構成では、/cgi-bin/ 配下のファイルは CGI として実行される。

4. 任意ディレクトリで CGI を許可する方法

ScriptAlias を使わず、通常の公開ディレクトリの一部で CGI を動かしたい場合は、対象ディレクトリに対して ExecCGIAddHandler を設定する。

たとえば C:\Apache24\htdocs\cgi-test を対象にする場合は次のように定義する。

<Directory "C:/Apache24/htdocs/cgi-test">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl .py .sh
    Require all granted
</Directory>

この方式では、指定した拡張子のファイルだけが CGI として扱われる。

5. httpd.conf 追記例

cgi-bin 方式の最小例をまとめると、httpd.conf には次のような定義になる。

LoadModule cgi_module modules/mod_cgi.so

ScriptAlias /cgi-bin/ "C:/Apache24/cgi-bin/"

<Directory "C:/Apache24/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    Require all granted
</Directory>

6. CGI テストファイルの例

6.1 Perl の例

#!C:/Strawberry/perl/bin/perl.exe
print "Content-Type: text/plain\r\n\r\n";
print "CGI OK\n";

この内容を C:\Apache24\cgi-bin\test.pl として保存する。

6.2 Python の例

#!C:\Users\****\AppData\Local\Programs\Python\Python310\python.exe
print("Content-Type: text/plain")
print()
print("Python(CGI) OK")

この内容を C:\Apache24\cgi-bin\test.py などとして保存する。

Note
注意点は 2 つです。
#! は 実在する python.exe の絶対パス
Content-Type のあとに 空行 が必要
Python の実パスはこれで確認します。
where.exe python

7. Apache の設定確認と再起動

7.1 設定文法チェック

PowerShell で次を実行する。

cd C:\Apache24
.\bin\httpd.exe -t

Syntax OK が表示されれば設定文法は通っている。

7.2 Apache の再起動

.\bin\httpd.exe -k restart

サービス名を明示する場合は次でもよい。

.\bin\httpd.exe -k restart -n "Apache2.4"

8. CGI の動作確認

8.1 ブラウザ確認

ブラウザで次にアクセスする。

http://localhost/cgi-bin/test.cgi

正しく設定できていれば、CGI OK のような出力が表示される。

8.2 PowerShell での確認

Invoke-WebRequest http://localhost/cgi-bin/test.cgi | Select-Object StatusCode, Content

StatusCode200 で、Content に期待する文字列が含まれていればよい。

9. 動かない場合の確認ポイント

9.1 source code がそのまま表示される

CGI として実行されず、ソースがそのまま出る場合は、次を疑う。

  • mod_cgi が有効になっていない

  • ScriptAlias が未設定

  • AddHandler cgi-script …​ が未設定

  • Options +ExecCGI が未設定

9.2 Forbidden が出る

権限や Directory 設定を確認する。

  • Require all granted

  • Options +ExecCGI

9.3 Internal Server Error が出る

まず error log を見る。

Get-Content C:\Apache24\logs\error.log -Tail 50

確認ポイントは次のとおり。

  • CGI 先頭の #! のパスが正しいか

  • Content-Type ヘッダを返しているか

  • 改行コードや保存形式に問題がないか

  • 実行対象インタプリタが存在するか

10. 補足

ScriptAlias 方式は、CGI 実行対象を明確に分離できるため、まず最初の確認には最も分かりやすい。

一方、既存の htdocs 配下の一部だけで CGI を動かしたい場合は、Options +ExecCGIAddHandler cgi-script の方式が向いている。

11. 最小確認手順まとめ

cd C:\Apache24
.\bin\httpd.exe -t
.\bin\httpd.exe -k restart
Invoke-WebRequest http://localhost/cgi-bin/test.cgi | Select-Object StatusCode, Content
Get-Content .\logs\error.log -Tail 50

12. まとめ

Windows の Apache24 で CGI を有効にする要点は次の 4 点である。

  • LoadModule cgi_module modules/mod_cgi.so

  • ScriptAlias /cgi-bin/ …​ または AddHandler cgi-script …​

  • Options +ExecCGI

  • CGI 側で Content-Type ヘッダを返す

まずは cgi-bin 方式で最小構成を通し、その後必要に応じて任意ディレクトリ方式へ広げるのが分かりやすい。

[1]: https://httpd.apache.org/docs/current/howto/cgi.html “Apache Tutorial: Dynamic Content with CGI – Apache HTTP Server Version 2.4”


投稿日

カテゴリー:

,

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です