WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

PerlをCGIとして利用する

      2012/12/18

PerlのインストールとApacheの基本的な設定

Perlで書いたスクリプトをCGIとして動作させる仕組みは、PerlとApache、Apacheのモジュールであるmod_cgiが必要です。

mod_cgiはApacheに標準で組み込まれているモジュールです。
ApacheでCGIを利用するための適切な設定がなされている場合、mod_cgiがMimeタイプが”application/x-httpd-cgi”であるか、ハンドラ”cgi-script (Apache 1.1 以降)”が指定されているファイルは CGI スクリプトとして扱い、実行します。

Perlのインストール

通常、Linuxには標準でPerlがインストールされています。
Perlのバージョンを確認するには下記のコマンドを実行します。

# perl -v
This is perl, v5.8.8 built for i386-linux-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Perlがまだインストールされていない場合は、LinuxをOSにインストールする時に任意でPerlのインストールを除外した可能性が高いです。
yumなどを利用してインストールを済ませます。

# yum -y install perl

Apache設定ファイルの編集

PerlをCGIとして利用する場合は、Apacheの設定ファイルの一部のディレクティブを変更する必要があります。

# vi /etc/httpd/conf/httpd.conf    ※Apacheの設定ファイルを開く

- 特定のディレクトリ(この例では"/var/www/html/public_html")でCGIを有効にする -
#entities##/entities#
Options Indexes FollowSymLinks
 ↓
FollowSymLinks ExecCGI Includes    ※Includesはmod_includeによるSSIを有効にするもの
#entities##/entities#

- 拡張子が".cgi"のファイルをCGIスクリプトとして扱う -
#AddHandler cgi-script .cgi
 ↓
AddHandler cgi-script .cgi

- 拡張子が".cgi"のファイルをindexとして扱う -
DirectoryIndex index.html index.php
 ↓
DirectoryIndex index.html index.php index.cgi

上記の設定を保存し、Apacheを再起動させると、ディレクトリ”/var/www/html/public_html”以下でCGIが利用できるようになります。

パーミッションの設定

Apacheの設定が完了したら、テスト用に下記のような簡単なスクリプトを用意してドキュメントルートに設置します。

test.cgi
#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print "Hellow World!";

スクリプトの一行目にはPerlインタプリタへのパスを指定します。わからない場合はwhereisコマンドなどで調べます。

# whereis -b perl
perl: /usr/bin/perl

あとはコンテンツヘッダを出力し、そのコンテンツのタイプに応じた内容をスクリプトで出力します。
このスクリプトでは”Hello World!”とプレーンテキストで出力するだけです。

このままの状態でブラウザから設置したファイルのURLにアクセスしても”Internal Server Error”というエラーが帰ってきてしまうので、パーミッションを変更して実行権限を与えます。

# chmod +x /var/www/html/public_html/test.cgi

実行権限付加後、ブラウザからアクセスして”Hello World!”と表示されれば動作成功です。

Internal Server Errorになってしまう場合の注意点

Internet Server Errorでスクリプトが実行できない場合は下記項目をチェックします。

  • Perlインタプリタへのパスは正しいか
  • ファイルのパーミッションは適切か
  • FTPなどでファイルをサーバにアップロードするときにアスキーモードでアップロードしているか

また、スクリプトの文法が少しでも誤っていると動きません。例えば、行末に;が入っていないなど細かい点でもです。
文法ミスが疑われる場合はApacheのエラーログを見てみると解決の糸口が見つかるかもしれません。

# less /var/log/httpd/error_log
syntax error at /var/www/html/public_html/test.cgi line 4, near "print"

 - CGI ,