• ベストアンサー

CGIが動かない

/var/www/html/hoge.cgiを作りました。 ----- #!/usr/bin/perl print <<'END'; Content-type: text/html; charset=utf-8 <html> <body> <p>hoge</p> </body> </html> END ----- ターミナル上でperl hoge.cgiとやった場合も、実行権を与えて./hoge.cgiとやった場合も、出力はちゃんとなされました。 httpd.confにはExecCGIとAddTypeにより、ソーステキストがそのまま表示されていたのを、Internal Server Errorまでこぎつけたのですが、なんでエラーなのかわかりません。 CGIってもしかしたら所有者がrootだと動きませんか? あとはぜんぜん思い当たることがなくて・・・。 Redhat7.3 Apache1.3.23

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

  • ベストアンサー
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.7

> mod_perlの利用はPerlによるCGI使用者にとって、かなり魅力的ですが、 > 実行スクリプトの量によってはメモリ消費が多くなることがあります。 > また、通常のCGIスクリプトは、おそらくmod_perlでは動作しない場合があるので、 > mod_perl用に注意深くコードを書き換える必要があります。 そんなことがあるのですね。 mod_perlというのを知らなかったのですが、 > mod_perlを組み込んでいない、素のhttpd.confを使ってみてください。 の反対で、redhat7.3の素の状態から組みこんでみました。 結果ですが、この test script では特に問題がありませんでした。 やったこと $rpm -ivh mod_perl-1.26-5.i386.rpm $diff httpd.conf.org httpd.conf 480c480 < Options Indexes FollowSymLinks --- > Options Indexes FollowSymLinks ExecCGI 973c973 < #AddHandler cgi-script .cgi --- > AddHandler cgi-script .cgi 1073,1080c1073,1080 < #<IfModule mod_perl.c> < # Alias /perl /var/www/perl < # <Directory /var/www/perl> < # SetHandler perl-script < # PerlHandler Apache::Registry < # Options +ExecCGI < # </Directory> < #</IfModule> --- > <IfModule mod_perl.c> > Alias /perl /var/www/perl > <Directory /var/www/perl> > SetHandler perl-script > PerlHandler Apache::Registry > Options +ExecCGI > </Directory> > </IfModule> # これでいいのかな?

haporun
質問者

お礼

mod_perlをインストールしなおして、この部分を書きなおしてみようと思います。

haporun
質問者

補足

すでにIfModule mod_perl.cの部分は書いてあったようです。

その他の回答 (9)

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.10

回答ではなくアドバイスですが、 そういえば一度も確認しなかったのですが、 お使いのApacheはRedHatのパッケージ版? 問題が長引きそうなら、Apacheをソースからコンパイル・インストールしてみてはどうでしょう? # ./configure # make # make install この3行だけで、できますので簡単です。 ディストロに標準のApacheとかはどうも好きになれなくて...

haporun
質問者

お礼

CD-ROMからインストールしたままです。 運がよければup2dateでかってにアップグレードしてるかもしれませんが。 とりあえず、Apaceh2.0にチャレンジしてみようとおもいます。 src.rpmの使い方を教わったので、いろんな新しいものをインストールしてみたくなりました。 ありがとうございました。

haporun
質問者

補足

この場を借りてこの質問に答えてくださったお二人に御礼を言いたいと思います。 いろいろ基礎を教わったので、それをもとにがんばろうと思います。 ありがとうございました。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.9

> 本に書いてあったとおりやってみたので、Apache設定ツールを1回使ってしまいまし > た。 > これで自動的に設定ファイルが書き変わったらしいですが、初期状態のファイルって > 残ってますか? さーて?? 自分で変更するときは必ずバックアップをとるんだけど、うっかりGUIツールを 使うと訳が分からなくなりがちですよね。 > mod_perlをインストールしなおして、この部分を書きなおしてみようと思います。 ちょっとまった。 どうせなら、httpdも入れ直して、回答4または回答6を試みるのが早道では?

haporun
質問者

お礼

すみません。 ディレクトリのマスクに、何を血迷ったのかtが入っていました・・・。 これを消すと動くようになりました・・・。 なんともお騒がせしました。 でもApacheは2.0も出てるみたいですし、mod_perlも含めて最新のものを導入してみようと思います。

haporun
質問者

補足

さて今度は apache-2.0.43-0.2.src.rpm proftpd-1.2.7rc1_pg-1.03.src.rpm がコンパイルできないという自体に陥りました・・・。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.8

>そんなことがあるのですね。 haporunさんの、サンプルは簡単な基本形なので、文法的には問題なかったみたいですね。 >mod_perlというのを知らなかったのですが、 昔、mod_perl独特の書き方があるのを知らずに、ツボにはまった経験があります。それ以来はもっぱらPHPです。

haporun
質問者

お礼

PHPは、本を見ながら掲示板を作るくらいならやったことがあります。 Perlと同じような文法で、Cっぽい関数が使えるので、とっつきやすかったです。 Windows + IIS or AnHttpdではどちらも動かすに至っているんですが、Linuxではなかなかです。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.6

> .htaccessのなかにExecCGIを書かなければならないのですか? > httpd.confの中に書いてはダメでしたか? いえ、別に。いろんな方法があるというだけです。 httpd.confだけですませるには、 $ diff httpd.conf.org httpd.conf 480c480 < Options Indexes FollowSymLinks --- > Options Indexes FollowSymLinks ExecCGI 973c973 < #AddHandler cgi-script .cgi --- > AddHandler cgi-script .cgi だけでオッケーですね。これなら.htaccessは不要でした。 いずれも redhat7.3のインストール直後の状態からの変更です。 httpd.confを初期状態に戻してから、落ち着いてやり直した ほうが良いのでは? 初期状態なら、何もしなくても /var/www/cgi-bin/ 以下でcgiが動いたと書きましたが試してみましたか?

haporun
質問者

お礼

本に書いてあったとおりやってみたので、Apache設定ツールを1回使ってしまいました。 これで自動的に設定ファイルが書き変わったらしいですが、初期状態のファイルって残ってますか?

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.5

mod_perlを組み込んでいない、素のhttpd.confを使ってみてください。 mod_perlの利用はPerlによるCGI使用者にとって、かなり魅力的ですが、 実行スクリプトの量によってはメモリ消費が多くなることがあります。 また、通常のCGIスクリプトは、おそらくmod_perlでは動作しない場合があるので、 mod_perl用に注意深くコードを書き換える必要があります。

haporun
質問者

お礼

mod_perlはLinuxインストール時にいっしょにチェックを入れたのですが、これをどこで組み込んでいるとか、ちょっと理解不能なもんで・・・。 しかし、これだけシンプルなスクリプトで、違いが現れるでしょうか・・・。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.4

$ diff httpd.conf.org httpd.conf 487c487 < AllowOverride None --- > AllowOverride Options 973c973 < #AddHandler cgi-script .cgi --- > AddHandler cgi-script .cgi っと変更して、httpdを再起動。あとは、cgiを許可したいディレクトリに .htaccessを作成。 $ cat /var/www/html/.htaccess Options +ExecCGI こんなところで、できますね。

haporun
質問者

お礼

.htaccessのなかにExecCGIを書かなければならないのですか? httpd.confの中に書いてはダメでしたか?

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.3

redhat7.3の標準の状態で、 /var/www/cgi-bin/ にこのスクリプトを置いたら、 http://server.domain/cgi-bin/hoge.cgi で動きましたよ。 標準では、このディレクトリにしかcgiが許可されていないのでは? apacheの設定で、/var/www/html/ 以下にcgiを許可する必要が あるのだと思います。

haporun
質問者

お礼

<Directory /var/www/html> Options ExecCGI Addtype・・・ とか書いて、ソーステキストが表示されるところから、実行してるけど失敗してるっぽいところまではいってるんですが・・・。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

711は明らかにだめですね。Apacheの所有者が、スクリプトを 読んで・実行する 権限が必要ですから。 でも、755でもだめでしたか? こちらは、/usr/local/apache/cgi-bin/に置いてます。 こちらでのスクリプトの権限は -rwxr-xr-x 1 root root 118 Dec 17 11:20 test.cgi* です。 ディレクトリの権限は drwxr-xr-x 2 root root 4096 Dec 17 11:20 cgi-bin/ drwxr-xr-x 14 root root 4096 Dec 13 16:37 apache/ です。 ファイル・ディレクトリの権限に問題なければhttpd.confが怪しい事になりますね。

haporun
質問者

お礼

711でダメなんですか? 読めなくても実行できれば良いのかと思っていました。 ディレクトリの権限も755なんですが・・・。 学校のサーバーは、700で動いてしまうのですが、これはmod_perlが原因なのでしょうか? 私もmod_perlをインストールしたのですが、mod_perlは所有者の権限で動くって聞きました。 これが原因?

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

このスクリプトをうちのサーバで試してみたら、無事に hoge と表示されましたので、文法ミスではないですね。 このスクリプトのファイル権限を確認してください。 このスクリプトを実行するのはApacheの所有者です。 Apacheの所有者が実行できる権限が必要です。 Apacheの所有者は、たとえばnobodyとかwwwとかに、 なっているはずです。 答えを言ってしまうと、一言で終わってしまいますので、ちょっと考えてみてください。

haporun
質問者

お礼

回答ありがとうございます。 chmod 711 hoge.cgiはしてあり、rwx--x--xになってはいるんですが・・・。 755も試しました。 いったい何が原因なんでしょう。

関連するQ&A