みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Fedora Core1サーバーでCGIが利用できません

Fedora Core1でwebサーバーを立てたのですが、実行しようとすると「500 Internal Server Error」となってCGIが動きません。
perlへのパスやパーミッションの設定も見直しましたが、どこの設定が間違っているか分からないので、設定方法を教えてもらえないでしょうか?

現在の環境は
ホスト名:saba.dyndns.org
perlのパス:/usr/local/bin/perl
CGIを仕えるようにしたいユーザー:guest
CGIを設置するディレクトリ:/home/guest/cgi-bin/
Apacheのバージョンは2.0.49
となっています。

また以下はhttpd.confの抜粋です。

Listen *:80

#ScriptAlias /cgi-bin/ "/var/www/html/"
ScriptAlias /cgi-bin/ "/home/guest/public_html/cgi-bin/"

AddHandler cgi-script .cgi .pl

<Directory "/home/guest/public_html/">
Options ExecCGI
AllowOverride None
Allow from all
Order allow,deny
</Directory>

<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options Includes ExecCGI FollowSymLinks
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

長文失礼しました。

投稿日時 - 2004-06-14 14:58:47

QNo.891803

困ってます

質問者が選んだベストアンサー

回答が遅くなりました。

テストできる環境があったのでそこで色々と実験してみました。
実験環境
OS:RedHatLinux9.0
perlのパス:/usr/bin/perl
webサーバー:apache2.0

結果
1)「簡単なスクリプト」は正常に実行できました。
2)スクリプトの先頭にあるperlへのパスを/usr/local/bin/perlとするとエラーになりました。
エラーログは、、
failed to open log file
fopen: Permission denied
Premature end of script headers: test.cgi
とrdenと同じものとなりました。

perlのパスを変更されたようですが理由は何でしょうか?
デフォルト(/usr/bin/perl)に戻したらどうなりますか?


蛇足ですが、、、
>補足ですが、上記のクライアントのIPアドレスの最後の「xxx」のところはちゃんと数字が入っています。
>書くときに「アドレスの最後は伏せた方がいいのかな?」くらいの気持ちで伏字にしたので他意はありません。
192.168で始まるIPはプライベートアドレスなので伏字にする意味はありません。二台以上のPCでlocalでテストしていることがわかるだけです。

投稿日時 - 2004-06-17 06:30:05

補足

>伏字にする意味はありません
失礼しました。

>perlのパスを変更されたようですが理由は何でしょうか?
http://fallenangels.zive.net/fedora/

↑のサイトでperlのパスを変更していたのでその通りにやりました。なので、あまり深い意味はありません。

>デフォルト(/usr/bin/perl)に戻したらどうなりますか?
/usr/local/bin に/usr/bin/perl へのリンクファイル(/usr/local/bin/perl)があったのでそれを削除して設定をデフォルトに戻してみましたが、やはり同じエラーが出てしまいました。


初めてのサーバー構築で、もしかしたら変なところをいじってしまったのかもしれないので、一度サーバーを再構築してみようと思います。恐らく1日2日で終わると思うので、それでも駄目だったらまたご教授お願いします。

投稿日時 - 2004-06-18 10:01:56

お礼

返事が遅れました。
一度全てOSを入れなおし、設定をやり直したところ、見事にCGIが動くようになりました。

結局原因は分からずじまいとなってしまいましたが、恐らくhttpd.confの設定をいじり過ぎたのが原因ではないかと思います。
今度はperlのパスは/usr/bin/perlのままで使っています。

色々とありがとうございました。

投稿日時 - 2004-06-21 02:28:11

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

いくつか質問があります。

1.パーミッションの具体的な値は?
2.ごく簡単なスクリプトを実行させて見ましたか?
3.エラーログはどうなっていますか?

これらの情報があるとより確かな回答が得られと思います。

投稿日時 - 2004-06-15 12:17:51

補足

レスありがとうございます。
>1.パーミッションの具体的な値は?
pubulic_html[755]/cgi-bin[755]/test.cgi[755]
となっています。

>2.ごく簡単なスクリプトを実行させて見ましたか?
#!/usr/local/bin/perl
 print "Content-Type: text/html\n\n";
 print "Your_IP=$ENV{'REMOTE_ADDR'}\r\n";

をtest.cgiとして実行してみましたが、「500 Internal Server Error」と出てしまいます。

>3.エラーログはどうなっていますか?
test.cgiを実行しようとしたところ以下のようなログが残りました。

[Tue Jun 15 21:47:08 2004] [error] [client 192.168.11.xxx] failed to open log file
[Tue Jun 15 21:47:08 2004] [error] [client 192.168.11.xxx] fopen: Permission denied
[Tue Jun 15 21:47:08 2004] [error] [client 192.168.11.xxx] Premature end of script headers: test.cgi

投稿日時 - 2004-06-15 21:44:51

お礼

補足ですが、上記のクライアントのIPアドレスの最後の「xxx」のところはちゃんと数字が入っています。
書くときに「アドレスの最後は伏せた方がいいのかな?」くらいの気持ちで伏字にしたので他意はありません。
自分にはこのエラーメッセージが意味するところがよく分かりません。

ご指導よろしくお願いします。

投稿日時 - 2004-06-15 23:34:48

ANo.1

設置する(したい)ディレクトリと、
httpd.confで設置すると宣言しているディレクトリが異なります。

ScriptAlias /cgi-bin/ "/home/guest/cgi-bin"
にする。

perlのパスは自分で設定されました?
RHL9まではrpmパッケージでいれると、
/usr/bin/perl
だった気がするんですが。

<Directory /home/*/public_html>
のオプションにEcexCGIつけるなら、public_html以下に置くと実行されますけど、それは別にいいんでしょうか?
(まぁsuexecいれてればsuexecは有効になるでしょうけど)

投稿日時 - 2004-06-14 15:32:31

お礼

早速のレスありがとうございます。

ScriptAliasのディレクトリですが、これはこちらの間違いでした。
CGIの設置ディレクトリは/home/guest/public_html/cgi-bin/でした。申し訳ありません。

perlのパスですが、これは自分で変更しました。
which perlコマンドでも確認しているのであっていると思います。

投稿日時 - 2004-06-14 16:57:28

あなたにオススメの質問