Views: 0
Apache24 の httpd.conf で CGI を実行可能にする手順
2026-03-10
1. 目的
Windows 11 上の Apache24 環境で、httpd.conf の設定により CGI を実行可能にする手順をまとめる。
本メモでは、次の 2 方式を扱う。
-
ScriptAliasでcgi-binディレクトリを CGI 専用として定義する方式 -
任意ディレクトリに対して
ExecCGIとAddHandlerを設定する方式
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 を動かしたい場合は、対象ディレクトリに対して ExecCGI と AddHandler を設定する。
たとえば 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
StatusCode が 200 で、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 +ExecCGI と AddHandler 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”


コメントを残す