- ベストアンサー
ApacheのCGI設定について教えてください
- 古いパソコンにfedora core 4をインストールしてローカルのテスト用サーバーにしようとしていますが、ユーザーのホームディレクトリに設置したperl CGIがinternal server errorになってしまいます。
- httpd.confの設定では、UserDirをdisableにしており、ユーザーのpublic_htmlディレクトリにはAllowOverride All、Options Includes ExecCGI FollowSymLinks、SetHandler cgi-scriptの設定がされています。
- エラーログにはPremature end of script headersというエラーメッセージが表示されており、/var/www/htmlディレクトリでは問題なく動作するため、Apacheの設定の問題である可能性があります。
- みんなの回答 (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のコンパイルしなおさない限りは)
その他の回答 (4)
- umasikajiro
- ベストアンサー率67% (545/803)
しつこいですが、更に付けたし 最初の質問である .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 と全許可してますので、こちらの可能性は低いですね
お礼
umasikajiro 様、遅くなって申し訳ありません。 ご指摘のように所有者等の条件をそろえて、SetHandler cgi-script の行を削除したら、うまく動作するようになりました。 少しだけApacheの理解が深まりました。今後も精進いたします。 理解しやすいご指摘と回答に感謝いたします。 本当にありがとうございました。
- umasikajiro
- ベストアンサー率67% (545/803)
見落としてました、、、 >SetHandler cgi-script これを記述しちゃうと、該当ディレクトリ中のfileは .txt や .gifだろうと .htm だろうとCGIとして扱われます ですので中身が普通のHTMLのままの .htmlファイルにアクセスすれば当然500errorになります
- Yeti21
- ベストアンサー率47% (396/830)
httpd.confや.htaccessの記述(構文等)に間違いがあると 無条件にエラーになる場合があります。 修正した個所等の再チェックをお勧めします。
お礼
ご指摘ありがとうございます。 私自身も不安になってきたので、httpd.conf のバックアップを戻して 最初からやり直してみました。
- Yeti21
- ベストアンサー率47% (396/830)
suEXEC機能でそのユーザーの権限で実行しているのが原因だと思います。 suEXECを無効にして動作するなら間違いないと思いますので、 以下の行があればコメントアウトして確認してみてはどうでしょう? LoadModule suexec_module modules/mod_suexec.so
お礼
早速ありがとうございます!。 教えて頂いた箇所をコメントアウトして、httpd restart してやってみたんですが、うまくいきませんでした。同じ結果です。 suEXEC機能について知らないので、今から調べてみます。 今更で申し訳ないんですが、なんと、CGI じゃない HTML のドキュメントも同じ Internal Server Error がでます。 何か根本的なところが間違っているんでしょうか? もう少し悪あがきしてみます。もし、初心者が陥りやすい事等、気がついた事がありましたら、ご指摘いただけたらありがたいです。
補足
ご指摘ありがとうございます。 別な急ぎの仕事が入ってしまって、試してみる時間が取れなくなってしまいました。 判りやすく指摘していただいて、感謝いたします。 ただ、上記のような状況ですので、結果はしばらくお待ち下さい。