Search

Language:  
Search for:

Available article translations:

ブラウザで URL を指定して cgi スクリプトの呼び出しを試みると、500 内部サーバエラーが表示されます。このような場合、どうすればよいですか?

解決策

1./etc/httpd/logs/suexec_log または /var/log/httpd/suexec_log で、CGI スクリプトの実行試行時のエラーを探します。suexec はパーミッションおよびオーナーシップに関するエラーを記録します。

cgi-bin/ フォルダに以下のパーミッションとオーナーシップが設定されていることを確認します。

drwxr-x--- myuser psaserv cgi-bin

このスクリプトのオーナーはドメイン FTP ユーザである必要がありますが、グループは 'psacln' でなければなりません。

-rwxr-xr-x myuser psacln script.cgi

スクリプトファイルとディレクトリツリー(サーバのドキュメントルートに対する相対パス)のパーミッションが、755 または -rwxr-xr-x(ユーザ: 読取, 書込, 実行;グループ: 読取, 実行; その他: 読取, 実行)より高く設定されていることを確認します。

2. Plesk は独自の suexec ファイルを使用しますが、このファイルが標準 Apache パッケージに付属するオリジナルのファイルに置き換えられた可能性があります。この場合、次のコマンドを使用して Plesk 独自のファイルを復元する必要があります。
# /bin/cp /usr/sbin/psa-suexec /usr/sbin/suexec

SuSe 9.x を使用している場合、/usr/sbin/suexec2 がオリジナルに置き換えられた可能性があります。
# /bin/cp /usr/sbin/psa-suexec /usr/sbin/suexec

Debian OS の場合、次のコマンドラインを使用します。
# /bin/cp /opt/psa/suexec/psa-suexec2 /usr/lib/apache2/suexec2

Plesk ベースのサーバで Apache をアップグレードする方法は、KB 記事 #762 を参照してください。

3. ファイルを Windows ワークステーションから FTP 経由でサーバにアップロードしたときに削除されなかった Windows の CR(キャリッジリターン)シンボルがスクリプトの各行末に含まれている可能性があります。

Windows システムではファイルの行末に CR(キャリッジリターン)または LF(ラインフィード)という隠し文字を使用しますが、Unix システムでは LF のみを使用します。

Windows ボックスからテキストファイルをアップロードするときは ASCII 転送モードを使用する必要があります。このモードでは CR,LF が LF のみに変換されます。CGI スクリプトを BINARY モードでアップロードすると、ファイルは変換なしでそのままアップロードされます。スクリプトを実行すると、CR 文字はテキストの一部として認識されてしまい、正しく解釈されません(以下参照)。

#!/usr/bin/perlCR
use strict;CR

また、/etc/proftpd.conf ファイルで、サーバ全体のデフォルト転送モードを ASCII モードに設定することもできます。

DefaultTransferMode ascii

アップロード済みのスクリプトに CR 文字が含まれていないかを確認し、修正するには、以下のいずれかの方法を使用します。

a) col ユーティリティで CR を削除します。
# cd /home/httpd/vhosts/domain.com/cgi-bin
# col -bx < script.cgi > script2.cgi
# ls -l
total 84
-rw-r--r-- 1 myuser psacln 27683 Jun 14 15:51 script2.cgi
-rwxr-xr-x 1 myuser psacln 25753 Jun 14 11:20 script.cgi
# mv script2.cgi script.cgi
mv: overwrite `script.cgi'? y
# chmod 755 script.cgi
# chown myuser:psacln script.cgi

myuser の代わりに、スクリプトのオーナーのユーザ名を指定してください。

b) pico テキストエディタでファイルを開いて保存すると、ファイルから CR 文字が削除されます。
# pico script.cgi


4. コマンドラインからスクリプトを実行して、エラーを確認します。
例:
# cd /home/httpd/vhosts/domain.com/cgi-bin
# ./script.cgi
: bad interpreter: No such file or directory

スクリプトを確認し、マジックコメントが perl の場所(#!/usr/bin/perl)を指定していることを確認してください。および/または、オプション 3 の説明のように #!/usr/bin/perl 行の行末の CR を確認します。


# ./script.cgi
String found where operator expected at sc.cgi line 3, near "xcprint """
(Do you need to predeclare xcprint?)
syntax error at sc.cgi line 3, near "xcprint """
Execution of sc.cgi aborted due to compilation errors.

この例では、このスクリプトに構文エラーがあり、修正しない限り正しく機能しません。



FEEDBACK
Was this article helpful?
Tell us how we may improve it.
Yes No