dポイントプレゼントキャンペーン実施中!

CGIの勉強のために、古いパソコンに fedora core 4 をインストールしてapache でローカルのテスト用サーバーにしようとしています。
/var/www/html に設置した簡単な perl CGI は動くのですが、同じものをユーザーのホームディレクトリに設置すると、internal server error になってしまいます。
***** 以下 httpd.confの抜粋です。*****
#UserDir disable
UserDir public_html
<Directory /home/*/public_html>
AllowOverride All
Options Includes ExecCGI FollowSymLinks
SetHandler cgi-script
</Directory>
AddHandler cgi-script .cgi .pl
**************************************
サーバーのエラーログを見ると
Premature end of script headers: test.cgi
となっています。htmlをprintしているだけのスクリプトで、/var/www/html では動くので、apache の設定の問題かと思っています。
ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

A 回答 (5件)

たとえば ユーザー tarou でディレクトリが/home/tarou/public_htmlなら


root権限で
# chown tarou:tarou /home/tarou/public_html/*.cgi
として .cgiファイルの所有者を、そのユーザーディレクトリに合わせてください。

#1さんの書かれたようにsuexecが原因だと思いますが
そのままコピーしたのならfileの所有者が問題になります。

その他にはsuexecの場合、、、
## .cgiフアイルのパーミッションは 700 でOKです。
  755や705でも動きますが777や707ではエラーになります

## .cgiを置くディレクトリのパーミッションは 701で OK
  755や、、以下同上

### 要するにsuexecの場合
1. cgiの所有者がユーザーディレクトリと一致しないと駄目
2. cgiやそのディレクトリに他の人が書き込み権限があると駄目
3. 今回は該当しませんが ユーザーのドキュメントディレクトリを勝手にpublic_html以外にしてもエラーになります
   (↑設定変更してApacheのコンパイルしなおさない限りは)

この回答への補足

ご指摘ありがとうございます。
別な急ぎの仕事が入ってしまって、試してみる時間が取れなくなってしまいました。

判りやすく指摘していただいて、感謝いたします。
ただ、上記のような状況ですので、結果はしばらくお待ち下さい。

補足日時:2006/10/14 09:35
    • good
    • 0

しつこいですが、更に付けたし


最初の質問である .cgiにアクセスして500errorになる件と
SetHandler cgi-script によって普通の.htmlでエラーになる件は別の原因かと思います

.cgiにアクセスしてエラーになる原因が #2にて書いたような事であれば
logs/suexec.logに 原因が記録されているはずです。
バージョンによって多少の文言は違いますが

・ .cgiファイルの所有者とディレクトリが違う場合
   target uid/gid (***/***) mismatch with directory (***/***) or program (0/0)

・  ディレクトリや.cgiに他者の書き込み権限がある場合
    file is writable by others: (/home/tarou/public_html/test1/hoge.cgi)

・  コンパイルし直しせずにpublic_html 以外をユーザードキュメントディレクトリにした場合
   cannot get docroot information

##そうじゃなくて .htaccessの記述に問題がある場合は
.htmlのと .cgiのエラーの原因は同じですが、
その場合は logs/error_log に .htaccess に問題がある旨、記録されます
例えば、有効な .htaccesに test と記述すると test という構文は有りませんので
中略/.htaccess: Invalid command 'test', perhaps mis-spelled
などと成ります。
また文法的には問題なくてもAllowOverrideで許可されていない記述をするとエラーになりますが
質問者さんの場合は AllowOverride All と全許可してますので、こちらの可能性は低いですね
    • good
    • 0
この回答へのお礼

umasikajiro 様、遅くなって申し訳ありません。
ご指摘のように所有者等の条件をそろえて、SetHandler cgi-script
の行を削除したら、うまく動作するようになりました。

少しだけApacheの理解が深まりました。今後も精進いたします。
理解しやすいご指摘と回答に感謝いたします。
本当にありがとうございました。

お礼日時:2006/10/17 00:24

見落としてました、、、


>SetHandler cgi-script
これを記述しちゃうと、該当ディレクトリ中のfileは .txt や .gifだろうと .htm だろうとCGIとして扱われます
ですので中身が普通のHTMLのままの .htmlファイルにアクセスすれば当然500errorになります
    • good
    • 0

httpd.confや.htaccessの記述(構文等)に間違いがあると


無条件にエラーになる場合があります。
修正した個所等の再チェックをお勧めします。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
私自身も不安になってきたので、httpd.conf のバックアップを戻して
最初からやり直してみました。

お礼日時:2006/10/17 00:28

suEXEC機能でそのユーザーの権限で実行しているのが原因だと思います。



suEXECを無効にして動作するなら間違いないと思いますので、
以下の行があればコメントアウトして確認してみてはどうでしょう?
LoadModule suexec_module modules/mod_suexec.so
    • good
    • 0
この回答へのお礼

早速ありがとうございます!。
教えて頂いた箇所をコメントアウトして、httpd restart してやってみたんですが、うまくいきませんでした。同じ結果です。
suEXEC機能について知らないので、今から調べてみます。

今更で申し訳ないんですが、なんと、CGI じゃない HTML のドキュメントも同じ Internal Server Error がでます。
何か根本的なところが間違っているんでしょうか?

もう少し悪あがきしてみます。もし、初心者が陥りやすい事等、気がついた事がありましたら、ご指摘いただけたらありがたいです。

お礼日時:2006/10/13 14:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!