ApacheからCGI(Perl)を利用できるように設定する

広告

Apache から CGI(Perl) を利用するために必要となる設定について解説します。実行するスクリプトが記述されたファイルをどこに設置するかによって必要となる設定は異なりますが、ドキュメントルート以下ではないディレクトリに設置する場合は ScriptAlias ディレクティブを使ってエイリアスを設定します。

必要なモジュールが利用可能か確認する

Apache から CGI を利用するには mod_cgi モジュールが利用可能になっている必要があります。デフォルトで利用可能になっていると思いますが、確認のために httpd.conf ファイルを開き mod_cgi で検索してください。

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#

#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule charset_lite_module modules/mod_charset_lite.so
#LoadModule data_module modules/mod_data.so

上記のようになっていれば mod_cgi モジュールは利用可能となっています。 LoadModule cgi_module modules/mod_cgi.so の前に # が記述されている場合はコメントとなっているので # を削除してください。

ScriptAliasディレクティブを設定する

CGI で実行するスクリプトが記述されたファイルは、インターネットから直接閲覧できる必要はありませんのでドキュメントルート以下ではなくドキュメントルートと同じ階層かさらに上位の階層にディレクトリを作成して保管します。(ドキュメントルート以下に配置する場合の手順は次のページで解説します)。

今回はドキュメントルートと同じ階層にある cgi-bin ディレクトリに CGI で実行するスクリプトが記述されたファイルを設置するようにします。

ScriptAliasディレクティブを設定する(1)

続いて ScriptAlias ディレクティブを使って指定したパスへアクセスがあった場合に、先ほど用意したディレクトリの中にあるスクリプトを実行するように設定します。書式は次のとおりです。

ScriptAlias URLパス ファイルパスまたはディレクトリパス

記述できる場所は httpd.conf, VirtualHost です。

例えば http://localhost/cgi-bin/xxx.pl へアクセスがあった場合に、 D:\pg\Apache\Apache24\cgi-bin\xxx.pl を実行して結果をクライアントへ返すようには次のように設定します。

ScriptAlias /cgi-bin/ D:/pg/Apache/Apache24/cgi-bin/

ScriptAlias ディレクティブを使って指定されたファイルやディレクトリ(に含まれるすべてのファイル)は cgi-script ハンドラで処理される CGI スクリプトとして扱われます。

それでは httpd.conf へ設定を行います。 httpd.conf ファイルを開き ScriptAlias で検索すると次のような記述が見つかります。

<IfModule alias_module>
    #
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
</IfModule>

デフォルトで ScriptAlias ディレクティブに関する設定として ServerRoot の下の cgi-bin ディレクトリに対する設定が記述されています。今回はこの設定のままでいいので別途設定を追加する必要はありません。もし異なるディレクトリに対して設定を行いたい場合は修正を行ってください。

CGIを設置したディレクトリに対するアクセスを許可する

ScriptAlias ディレクティブで設定したディレクトリのファイルは直接外部へ公開する必要はありませんが、アクセスの許可は行っておく必要があります。そこで ScriptAlias ディレクティブで設定したディレクトリに対して次のようにアクセスを許可します。

<Directory D:/pg/Apache/Apache24/cgi-bin/>
  Require all granted
</Directory>

httpd.conf の任意の場所へ記述してください。ただ httpd.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>

今回はこの設定のままでいいので別途設定を追加する必要はありません。もし異なるディレクトリに対して設定を行いたい場合は修正を行ってください。

httpd.conf ファイルの更新が終わりましたら Apache を再起動して新しい設定を反映させておいて下さい。これで Apache から CGI を利用するための設定は完了です。

CGIが利用できるか確認する

Apache から CGI を利用できるように設定ができたかどうかを確認するために、簡単なスクリプトを作成して動作確認を行います。テキストエディタを開き次のように記述します。

#!C:/pg/Strawberry/perl/bin/perl

print "Content-type: text/html;\n\n";
print "<html><body><p>Test CGI</p></body></html>\n";

上記のファイルを D:/pg/Apache/Apache24/cgi-bin/ ディレクトリに配置します。ファイル名は test.pl としました。(スクリプトファイルの 1 行目は Perl の実行ファイルがある場所です。ご自分の環境に合わせて変更して下さい)。

CGIが利用できるか確認する(1)

※ Winows10 の環境で Perl を実行するために事前に Perl のインストールを行っています。 Perl の環境を用意する方法については「Perlのインストール」を参照されてください。

ブラウザを起動し http://localhost/cgi-bin/test.pl へアクセスして下さい。次のように test.pl が実行されて結果がブラウザに表示されれば Apache から CGI を利用できるようになっています。

CGIが利用できるか確認する(2)

-- --

Apache から CGI(Perl) を利用するために必要となる設定について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。