独自 CGI スクリプトのインストールとデバッグ
VPS v2 は、物理的な一台のサーバーとほぼ同等の自由度と能力を持つように設計されており、root 権限もあります。そのため、目的に応じたカスタマイズが可能です。その中には、独自開発あるいは第三者の開発した CGI スクリプトの利用も含まれます。
スクリプトが目的通り作動するためには、スクリプトファイルとそれに関連した全てのファイル及びディレクトリーの所有権と実行権限が正しく設定されている必要があります。全てのスクリプトファイルにわたって、オーナー (owner)、グループ (group)、ワールド (world) がスクリプトファイルの実行権限を持っていなければなりません。全てのスクリプトファイルのオーナー(ユーザー)及びグループは、スクリプトディレクトリーのオーナー(ユーザー)及びグループと一致しなければなりません。また、このオーナー(ユーザー)及びグループは、Web サーバーの設定とも一致しなければなりません。メインのホストの場合は、ユーザー、グループとも www です。サブホストの場合は、ユーザー、グループは、apache の設定ファイル (/usr/local/apache/conf/httpd.conf) の VirtualHost ディレクティブで指定されています。
Perl スクリプトでの注意点
ASCII モードでアップロードしてください
Perl スクリプトはテキストファイルです。テキストファイルは Virual サーバーにアップロードする場合、必ず、ASCII モードでアップロードする必要があります。ASCII モードでアップロードしないと、500 Server Error が発生します。文字コード EUC 日本語を含んだスクリプトをアップロードする場合、ローカルでのファイルの保存を改行 CR + LF で行ってからにしてください。
Perl のパスは /usr/bin/perl です
スクリプトの最初の行に、Perl のパスはを記載する必要があります。VPS v2 での Perl 5 のパスは /usr/bin/perl です。Web 等で入手した、第三者の作成した、スクリプトを使う場合は、この点を特に注意してください。
sendmail のパスは /usr/sbin/sendmail です
v2 サーバーではデフォルトでは /usr/sbin/ へはパスが通っていません。パスを通すか、スクリプトでフルパスで指定するようにしてください。
コマンド名 command のパスは which command で調べられます。
500 Server Error を解決する
500 Server Error が発生した場合、最も簡単に原因を見つける方法は、web サーバーのエラーログを調べることです。web サーバーのエラーログは一般には ~/www/logs ディレクトリー以下に error_log の文字を含んだファイル名で保存されています。正確な、ディレクトリーとファイル名は、apache の設定ファイル (/usr/local/apache/conf/httpd.conf) の VirtualHost ディレクティブで指定されています。
以下の手段で、リアルタイムにエラーを確認することができます。先ず、VPS v2 に SSH でログインし su で root になります。 tail コマンドを実行します。エラーログのファイル名とディレクトリー名は適宜読み替えてください。
tail の実行
# tail -f /www/logs/error_log
tail コマンドは error_log ファイルの最後の部分に記載さてているものを表示します。-f オプションをつけると error_log ファイルへの書き出しをリアルタイムに表示させることができます。
Ctrl + C でリアルタイム表示から抜けられます。
tail コマンドを実行した状態で、ブラウザから CGI スクリプトを再実行すると、エラーの原因が error_log に書き出されますので、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 コマンドを実行中のコンソールにこのエラー表示以前に、エラー発生行と、エラーの理由が表示されているはずです。
SPEEDEX サポートポリシー
Copyright @ Cyber Vision Hosting Co., Ltd. All rights reserved.
Email: support@speedex.ne.jp
株式会社サイバービジョンホスティング提供サービス一覧
再販売用レンタルサーバーのSPEEDEX | VPS(仮想専用サーバー) | 共用サーバー | 独自ドメイン取得・運用 | SSLサーバー証明書 | ワイルドカードサーバー証明書 | SEO | Google Apps(TM) | クリエイティブワークの検索エンジン
|