独自 CGI スクリプトのインストールとデバッグ
本ページは 2008-04-01 更新されました
注意:以下のリンクが設定されているためこのサポートページでは /www/conf/httpd.conf と記述します。
FreeBSD では /www/conf/httpd.conf -> /usr/local/apache2/conf/httpd.conf
Linux では /www/conf/httpd.conf -> /etc/httpd/conf/httpd.conf
また、以下のリンクが設定されているためこのサポートページでは /www/logs/ と記述します。
FreeBSD では /www/logs/ -> /usr/local/apache2/logs/
Linux では /www/logs/ -> /var/log/httpd/
|
vps サーバーは、物理的な一台のサーバーとほぼ同等の自由度と能力を持つように設計されており、root 権限もあります。
そのため、目的に応じたカスタマイズが可能です。
その中には、独自開発あるいは第三者の開発した CGI スクリプトの利用も含まれます。
スクリプトが目的通り作動するためには、スクリプトファイルとそれに関連した全てのファイル、及びディレクトリーの所有権・実行権限が正しく設定されている必要があります。
全てのスクリプトファイルにわたって、オーナー (owner)、グループ (group)、ワールド (world) が、スクリプトファイルの実行権限を持っていなければなりません。
全てのスクリプトファイルのオーナー(ユーザー)及びグループは、apache の設定ファイル (/www/conf/httpd.conf) の SuexecUserGroup で指定されたユーザー及びグループと一致しなければなりません。
メインのホストの場合は、ユーザー、グループとも FreeBSD の場合は www、Linux の場合は apacheです。
サブホストの場合は、apache の設定ファイル (/www/conf/httpd.conf) の VirtualHost ディレクティブ内で指定されています。
Perl スクリプトでの注意点
ASCII モードでアップロードしてください
Perl スクリプトはテキストファイルです。
テキストファイルは Virual サーバーにアップロードする場合、必ず、ASCII モードでアップロードする必要があります。
ASCII モードでアップロードしないと、500 Server Error が発生します。
文字コード EUC 日本語を含んだスクリプトをアップロードする場合、ローカルでのファイルの保存を改行 CR + LF で行ってからにしてください。
Perl のパスは /usr/bin/perl です
スクリプトの最初の行に、Perl のパスはを記載する必要があります。
vps サーバーでの Perl 5 のパスは /usr/bin/perl です。
Web 等で入手した、第三者の作成した、スクリプトを使う場合は、この点を特に注意してください。
sendmail のパスは /usr/sbin/sendmail です
コマンド名 command のパスは which command で調べられます。
500 Server Error を解決する
500 Server Error が発生した場合、最も簡単に原因を見つける方法は、web サーバーのエラーログを調べることです。
web サーバーのエラーログは一般には /www/logs ディレクトリー以下に error_log の文字を含んだファイル名で保存されています。
サブホストの場合の正確なディレクトリーとファイル名は、apache の設定ファイル (/www/conf/httpd.conf) の VirtualHost ディレクティブを調べてください。
以下の手段で、リアルタイムにエラーを確認することができます。
先ず、vps サーバーに SSH でログインし、
su で root になります。
tail コマンドを実行します。
エラーログのファイル名、ディレクトリー名は適宜読み替えてください。
tail の実行
# tail -f /www/logs/error_log
tail コマンドは error_log ファイルの最後の部分に記載されているものを表示します。
-f オプションをつけると error_log ファイルへの書き出しをリアルタイムに表示させることができます。
Ctrl + C でリアルタイム表示から抜けられます。
tail -fコマンドを実行した状態で、ブラウザから CGI スクリプトを再実行すると、エラーの原因が shell 画面に書き出されます。
tail コマンドを実行中のコンソールでリアルタイムに確認することができます。
典型的な CGI エラーと解決策
HTTPd/CGI: exec of [CGI PATH INFO] failed, errno is 2
原因と解決策
CGI スクリプトがインタープリターを特定できなかったというエラーです。
スクリプトが Perl の場合、上記「Perl のパスは /usr/bin/perl です」で記述したように、正しい Perl のパスが使われているかどうかを確認してください。
Perl のパスが正しい場合は、スクリプトを BINARY モードでアップロードしている可能性が大です。
もう一度スクリプトを ASCII モードでアップロードしなおしてみてください。
HTTPd: malformed header from script [CGI PATH INFO]
原因と解決策
スクリプトが正しいヘッダーを書き出さなかったというエラーです。
CGI が実行されたとき、CGI は web サーバーにメッセージを返します。
このメッセージは header 部と body 部で構成されていなければなりません。
header 部は典型的には content type として、body 部のデータの種類を指定します。 header 部と body 部は空行で分離されていなければなりません。
以下が事例です。
Content-type: text/html
<html>
<head><title>Title</title></head>
<body bgcolor="white">
Hello world!
</body>
</html>
malformed header from script エラーは、上記で述べたような正しいヘッダーをスクリプトが返さなかったというエラーです。
Content-type にスペル間違い等の間違いがないか、正しいデータタイプが指定されているか(text/html 等)、空行が指定されているかを調べてください。
スクリプトが異常終了している場合も、このエラーが表示されるケースがほとんどです。
しかし、異常終了している場合は、tail コマンドを実行中のコンソールにこのエラー表示以前に、エラー発生行と、エラーの理由が表示されているはずです。
こうした場合のより詳細な情報を得る手段が shell 上で直接スクリプトを実行してみることです。
例えば、perl のスクリプト /www/cgi-bin/sample.cgi をテストする場合は以下のように行います。 -cw オプションをつけて perl を実行することで詳細なエラー情報が得られます。
perl -cw /www/cgi-bin/sample.cgi
SPEEDEX サポートポリシー
Copyright @ Cyber Vision Hosting Co., Ltd. All rights reserved.
Email: support@speedex.ne.jp
株式会社サイバービジョンホスティング提供サービス一覧
再販売用レンタルサーバーのSPEEDEX | VPS(仮想専用サーバー) | 共用サーバー | 独自ドメイン取得・運用 | SSLサーバー証明書 | ワイルドカードサーバー証明書 | SEO | Google Apps(TM) | クリエイティブワークの検索エンジン
|