• ベストアンサー

CGIが使えないのはなぜ?

こんにちは。 現在Redhat8を使用して、サーバーを作っています。apacheを起動してサイトが表示できるまではOKだったのですが、CGIを使う段階でつまづいています。 httpd.confは様々なサイトを見てそのとおりに編集したのですが、いざCGIを起動するとServerError!となります。Error_logを見ると↓のような妙な文章でした。Permissionなら分かるのですが、、これは何でしょう。 Premature end of script headers: XXX.cgi CGIの先頭のPerl指定は #!/usr/bin/perl にしてあります。何が悪いのか分からず途方にくれています。何かチェックする部分があればどうかご指摘ください。お願いします。パーミッションの設定は完了しており、CGIスクリプト自体も先頭以外はいじっていません。 RedHat8.0 Apache2.0 /home/www/html にHTMLファイル /home/www/cgi-bin にCGIスクリプト ----------------以下関係のありそうなhttpd.confの抜粋 ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory /home/www/cgi-bin> Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi

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

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

> 「英語のCGI」だと全く問題ないということが判明しました。 では,改行コードの問題じゃないですね. 変なところに2バイト文字が紛れ込んだりしてませんか? 特に,空白など,見落としがちだと思います. perl -c で,文法チェックするとどうなりますか? サーバーでの直接実行の結果は?

その他の回答 (3)

noname#27115
noname#27115
回答No.3

ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" となっていますが、、、 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" に戻して、同じエラーがでるかです。 ユーザーディレクトリの場合でも /home/*/public_html を /home/*/abc/public_html の様に デフォルトから動かすと エラーになる場合があ ります。 suExecが絡んでいるようです。 外しているかもしれませんが。。

ToshiJP
質問者

お礼

こんにちは。おっしゃるようにオリジナル?に戻して試してみましたが、同じでした。 その後、ネットではいずりまわって情報を集め、いろいろやったところ「英語のCGI」だと全く問題ないということが判明しました。ということは、改行コードか何かの問題だと思うのです。 ASCIIモード、EUC関連、FTPソフトでいろいろ試してみたのですが、ダメでした。 \n とかそのあたりがくさいのかな・・・

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

そのスクリプトをサーバー上で実行してみて, bad interpreter というエラーが出るようなら,スクリプトの改行コードがおかしいのだと思います. Dos/Windows から ftp 転送する場合は,ASCII モードで転送しましょう. サーバー上で dos2unix コマンドで変換しても良いです.

ToshiJP
質問者

お礼

とりあえずffftpのASCIIモードで上げてみましたが、今だ変化が見えずです・・・うーむ 一体何が・・・でも原因はastronautさんが言うように各行の改行コードがくさい気がしてきました。  情報ありがとうございます

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

Perlへのパスが間違っているのかもしれません。 /usr/local/bin/perl で試してみてください。

ToshiJP
質問者

お礼

whereis perl で検索したところ /usr/bin/perl でしたので、これはOKのようでした・・・

関連するQ&A

  • cgiの設定方法

    はじめまして、自宅でサーバーを立てようとしているのですが、つまずいてしまったので力を貸してください。 環境はRedhat9.0(?)、apache2.054を使用しています。 cgi自体はネットから落としてきた物を手始めとして使用してます。 /var/www/にcgi-binを作成、そこにcgiファイル等を格納しています。 cgi、perlファイルは705 ログファイルは606 ロックファイルは707にパーミッションを設定しています。 httpd.confは ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" AddHandler cgi-script .cgi .perl <Directory "/var/www/cgi-bin"> allowoverride none options execcgi order allow,deny allow from all </directry> 上記のように設定しています。 HPを表示させようとすると 「InternalError」と表示され、先に進みません。 このサイトを検索し、アスキーモードで転送も行って見たのですが。。。 どなたかCGI設定方法をご教授お願いいたします。

  • 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> 長文失礼しました。

  • ユーザー毎のディレクトリでCGIを設置

    ユーザー毎のディレクトリでCGIを設置可能にしようとしているのですが、うまくいきません。 教えて下さい。 【環境】 Apache/2.0.40 Red Hat Linux 8.0 【httpd.confの設定抜粋】 DocumentRoot "/home/homepage/public_html" <Directory /home/homepage/public_html> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> <IfModule mod_userdir.c> UserDir public_html </IfModule> <Directory /home/*/public_html> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> #ScriptAlias /cgi-bin/ "/home/homepage/public_html/cgi-bin/" 【.htaccessの設定】 AddHandler cgi-script .cgi Options +ExecCGI 以上のような設定で #!/usr/bin/perl print "Content-type: text/html\n\n"; print "hello"; こんなCGIをつくって実行してみました。 /home/homepage/public_html/cgi-bin/においたものはうまくいくのですが /home/user/public_html/cgi-bin/においたものはエラーになってしまいます。 エラーの内容は↓のとおりです。 Server error! The server encountered an internal error and was unable to complete your request. Error message: Premature end of script headers: hello.cgi If you think this is a server error, please contact the webmaster Error 500 perlのパスは間違ってないし、パーミッションも755にしてあります。 どうすればいいのか分からず困っています。 どこを調べれみればいいのかだけでも教えていただけると助かります。 よろしくお願いします。

  • cgi実行ディレクトリをデフォルト以外に追加設定する方法

    apacheのcgi-bin/のディレクトリはデフォルトだと、 DIR: /usr/local/apache/cgi-bin/ に設定されていると思います。 さらに実行出来るディレクトリを追加してあげる場合 httpd.confのScriptAliasを 手順的に追加するだけで出来るのでしょうか? 例 ScriptAlias /cgi-bin/testdir/ "/home/test/testdir/" <Directory "/home/test/testdir"> Options +ExecCGI </Directory>

  • CGIの設定

    いつもお世話になっております。 各バーチャルドメイン内でCGIを動作させるためにApacheの設定を したのですが、「ページが表示されません」と出てしまいます。 (バーチャルドメインの設定も完了していて、HTMLファイル、PHPファイルは正常に動作しています。) よろしくご教示お願いいたします。 /etc/httpd/conf/httpd.conf -------------------------------------------------- ScriptAliasMatch /~(..*)/cgi-bin/(.*) /home/$1/cgi-bin/$2 <Directory "/home/*/cgi-bin"> AllowOverride None # Options None Options ExecCGI Order allow,deny Allow from all </Directory> (1) ↓にファイルをアップロード   パーミッションは「755」に設定してあります。   /home/ユーザ名/cgi-bin/count.cgi (2) ブラウザから↓のURLでアクセス   http://バーチャルドメイン/cgi-bin/count.cgi <環境> Red Hat Enterprise Linux 5 Apache:2.2.3

  • cgi-binディレクトリ内のhtmlを有効にしたい

    度々お騒がせしております。 本日は、Apacheの設定について 伺いたく投稿させていただきました。 apacheの設定を終え、 一通り動作するようにできたのですが、 cgi-binディレクトリに置いたhtmlや jpg,gifといったcgi以外のファイルが 表示されません。 httpd.confによる cgi-binディレクトリの設定でどうにかなるものと思い、 色々調べてみたのですが、 いまいち設定方法がわかりません。 以下、私の環境です。 Apacche 1.3.20 htmlディレクトリ /var/www/html/ (775) cgi-binディレクトリ /var/www/html/cgi-bin/ (775) 現在のcgi-binディレクトリの設定 ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> 以上、どうかよろしくお願いいたします。

  • すみません、二度目です。fedora core3でcgiが動きません。

    すみません、以前も質問したのですが、残念ながら解決に至らなかったので ここでまた質問させていただきました。お詳しい方のアドバイスをよろしくお願い致します。 cgi-binの中にauctというディレクトリを入れその中にあるindex.cgiにアクセスしたいのですが http://localhost/cgi-bin/auct/index.cgi とアクセスすると、500 internal server error となってしまいます。 httpd.confの設定は scriptalias /cgi-bin/ "/var/www/cgi-bin/"を                     ↓ alias /cgi-bin/ "/var/www/cgi-bin/"と変え(#は外しています)、 <Directory "/var/www/cgi-bin"> のoptionsをnoneからExecCGIにしました。 あと #AddHandler cgi-script .cgi の#は外しました。 scriptaliasをaliasに変えたのはindex.cgiにアクセスすると、同ディレクトリ内にある、start.shtmlというファイルを開くという設定になっているので、それをCGIと認識されないようにするためにしました。 そのほかはデフォルトの状態ですので、documentrootはvar/www/htmlです。 各CGIのperlのパスは#!/usr/bin/perlとしていて 実際そこにperlがあるか確認もしました。 設定した後httpdの再起動もしました。 error log は premature end of script headers: index.cgiと File does not exist: /var/www/html/favicon.ico となっています。 この設定でWindowsのapacheはCGIが動作したのですが、fedora core3ではうまくいかないのは どうしてでしょうか?アドバイスお願いいたします。

  • CGIが動きません!!

    CGIが動きません。htmlを表示できる状態です。 エラーログには「 couldn't spawn child process: g:/program files/apache group/apache/cgi-bin/hello.cgi」と表示されています。 どうしたら良いのでしょうか? windouw NT 4.0 + Apache version 1.3.19 + Active Perl version 5.005_03 です。 perlの構文チェックは問題なしです。 httpd.confの設定は下記のようにしました。 1.AddHandler cgi-script .cgi を追加。 2.オプションの設定にExecCGIを追加。 <Directory "G:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None # Options None Options ExecCGI Order allow,deny Allow from all </Directory>

  • OSXでcgi

    OSXでperlで作ったcgiを動かしたいと思い色々といじってるのですが全く動きません。 apacheのhttpd.confの設定で AccessFileName .htaccess AddHandler cgi-script .cgi AddHandler cgi-script .pl についてはコメントをはずして使えるようにして Perlのパスも#!/usr/bin/perlとしてsiteフォルダとcgiを置いてるディレクトリに.htaccessを下のように記述して作り AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .cgi/ パーミッション設定をちゃんとしてあげてるのですがブラウザからアクセスするとForBiddenとでてしっかりと設定してるはずのパーミッション設定が間違ってますと言われてしまいます。 OSXでcgiを動かすには他にももっと色々と設定しなければダメなんでしょうか?

    • ベストアンサー
    • Mac
  • Apache/2.2.13 WebサーバーでCGIが動きません

    ご迷惑をおかけして、すいません。 何方か助けてください。お願いいたします。 OS Redhat Linux Fedora 11 バージョン 1.430 Webサーバー Apache バージョン 2.2.13 perl perl 5.10.0-73.fc11 httpd.confの記述 ------------------------- AddHandler cgi-script .cgi .pl ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory /home/www/cgi-bin> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> ------------------------ デレクトリー /home/www/cgi-bin 属性(775 rwxrwxr-x) CGIファイル 属性(775 rwxrwxr-x) http://eiwa-up.com/cgi-bin/index.pl http://eiwa-up.com/cgi-bin/index.cgi 同じファイルで拡張子が.plは正常に動作します。 拡張子が.cgiだと動かない状態です。 お忙しい中申し訳ありませんが、何方か助けてください。 お願いいたします。 趣味で無料レンタルCGIをボランティアで提供していたのですが、 先月Linux Laser5が老朽化のためダウンしてしまい、新しくFedora11のwebサーバーを新インストールしているのですが私の知識では解決できそうにありません。無料レンタルCGIで使用していたサーバーのためたくさんの方にご迷惑おかけしている状態です。 なぜ.cgi拡張子だと動作しないのか?解決方法を教えていただけたら憂いしいのですが。よろしくお願いいたします。