• ベストアンサー

LinuxのapacheでCGIが動かない

RedHatLinux7でイントラネットでWebサーバーを構築しました(apache)で、CGIを動かしたいのですが、動きません。あるサイトで「httpd.conf の AddHandler cgi-script .cgiを生かせばいい」となっていたのでそうしましたが、まだ動きません。あと何を設定すれば良いのですか?(CGIのパーミッションはちゃんとしています。)httpd.confにCGIの記述が他にもありましたが意味がわからずそのままにしています。

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

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

デフォルトの設定が分からないので確認点だけ、、、 ・ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" ・AddHandler cgi-script .cgi ・<Directory [ScriptAliasで指定したディレクトリ]> Options ExecCGI httpd.confの設定は以上です。 あとは、CGIファイルに「実行属性(x)」パーミッション が付いているか確認してください。 P.S. どのようなエラーメッセージが出ているのかが 分かれば、およその見当がつくのですが、、、

jincyan
質問者

補足

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"の "/usr/local/apache/cgi-bin/"は何を設定するのですか?(初心者なので申し訳ありません。)apacheのところがwwwになっていました。それでOptions ExecCGI は追加しました。でも動きません。CGIファイルに「実行属性(x)」パーミッションはついています。 NINJA104さんの回答との違いは何でしょうか?どちらもやりましたが・・まだ駄目でした。

その他の回答 (10)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.11

むずかしいですねぇ... となると、該当のCGIスクリプトの中でinclude又はsystem呼出しを行っている追加スクリプトや実行プログラムが見付からないのかもしれません。 jcode.plやnkf等の追加ツールを使用する様なCGIスクリプトになっておりませんか? もしそれらがサーバ上に存在していたとしても、apacheの実行ユーザ(デフォルトでは"apache"の筈)のパスの通っているディレクトにいなければ動作しません。 CGIスクリプトと同一のディレクトリにそれらも一緒に置くか、またはCGIスクリプトの中で夫々を呼び出している記述を個々の絶対パスに書き換える必要があります。

jincyan
質問者

お礼

お騒がせして申し訳ありませんでした。 perlの存在場所を正しく記述していたはずでしたがもう一度見ると間違えておりましたので修正して動かしたら正常に動作しました。 エラーの意味をよくよく考えればそういう意味だったみたいです。(笑) apacheのコンフィグが間違っているとばかり思っていたのですが・・・単純なエラーでした。(笑)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.10

では、最後に一つ以下の点を確認してください。 sambaで転送したperlスクリプトの改行コードは LF になっていますか? 私の経験では、CR+LF(Win系) や CR(Mac系)のままだと動作致しません。 (エラーとしては、コード501の Internal Server Error が出る筈なのでちょっと違うかな... ) 此れでも違う様でしたら、現物を直接チェックしていかないと私も此れ以上は思い付きません。m(_'_;m

jincyan
質問者

補足

NINJYA104さんの補足に書いているエラーはapacheのエラーLOGの内容です。直接URLにCGIのあり場所を記述したら「エラーです管理者に相談するかエラーLOGに書いてある」と出るので見てみたら、そんな内容でした。sambaで転送して駄目ならFTPで転送しても同じ結果です。スクリプトの実行でファイルがないと怒っているのが何なのかがわかりません。 以前インターネットでCGIを挙げたとき他のユーザーの所に無理やり入れたらCGIが動かなかったことがあります。(それとは今回は関係ないのかな?)

  • h_hikita
  • ベストアンサー率40% (104/257)
回答No.9

/home/jin/WWW/cgi-bin/cnt.cgi に実体があるのなら、 http://www.foobar.org/~jin/cgi-bin/cnt.cgiで 参照するもののような気がするのですが???

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.8

>エラーLOGをみると「そんなファイルまたはディレクトリーがない」 というログとsambaで転送したという事ですが、もしかしてCGIファイル名の拡張子が ~.CGI ← 大文字 になっていませんか? unixは大文字と小文字を区別しますので、大文字のファイル名でも実行可能にさせたい場合は、 > AddHandler cgi-script .cgi .CGI と、書き足してあげるか、または必ず小文字に直せば良いでしょう。

jincyan
質問者

補足

エラーの内容は下記です。 [Sun Apr 15 09:40:44 2001] [error] (2)No such file or directory: exec of /home/jin/WWW/cgi-bin/cnt.cgi failed [Sun Apr 15 09:40:44 2001] [error] [client 192.168.0.9] Premature end of script headers: /home/jin/WWW/cgi-bin/cnt.cgi それで、CGIを削除したらスクリプトが無いって言うエラーに変わったのでCGIは動いているのではないかと思いますが、ファイルが無いとういのは確かにファイルを使ってますがCGIの中でちゃんとパスを切っているので見つからないというエラーは理解しがたいのですが・・・パーミッション等の関係で(インターネットサーバー管理者に尋ねるとユーザー・グループ・パーミッションの関係でおかしくなる・・という回答だったので・・)そのようなエラーが出るのでしょうか? あと別のCGIを動かしても(そのCGIはCGI-BINディレクトリの中のデータファイルを見ているだけですが・・)同じエラーが出ます。 理解範囲を超えております(笑)

  • Cedar
  • ベストアンサー率57% (4/7)
回答No.7

間違っていたらごめんなさい。 ScriptAlias行があると、cgiはこのディレクトリに 強制されていたような気がしてます。 以下のようにデフォルトの #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" をコメントアウトして、 <Directory "/home/*/WWW"> ~ Options ExecCGI ~ </Directory> としては如何でしょうか。 この場合だと、http://hogehoge.com/~hoge/abc.cgi という形で呼び出すことになるのかなあ?という感じですが、 もしdocumentrootの/var/www/cgi-binを使っているなら、 ScriptAlias は生かしておいて、 usrごとにディレクトリを作って、 SYMB_LINKを~USRからはるのも手だと思います。 この場合だと ~hoge/WWW →/var/www/cgi-bin/hoge http://hogehoge.com/cgi-bin/hoge/abc.cgi で呼び出しかなあなんて思ってます。 参考になればとおもいます。 ではでは

参考URL:
http://www.apache.org
  • ken2
  • ベストアンサー率36% (86/235)
回答No.6

/home/wwww/cgi-bin/の下においていますか?

jincyan
質問者

補足

selenityさんのエラーの質問ですが、エラーLOGをみると「そんなファイルまたはディレクトリーがない」というエラーです。しかしながら現実には存在しています。転送をsambaで行ったのですが・・その辺に問題があるのでしょうか?(このCGIはインターネット上では正常に動作しております。) ken2さんの質問は置いている場所は /home/ユーザー/WWW/cgi-bin の下です。 ファイル名をちゃんと認識すれば上手く動作するのではないかと思います・・

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.5

基本のお話になりますが、httpd.conf を書き換えた場合、その内容を反映させるには apache(httpd)を再起動させないといけませんが、行っておりますか? 単純にスーパーユーザー(su)にてコンソール又はターミナルのコマンドラインから /etc/init.d/httpd restart とタイプすればOKです。 話しの流れから 各ユーザ用ディレクトリ(/home/*/WWW)の下層の任意ディレクトリでCGIを実行させたいのだと推測されますが、その辺りの認識誤りが有ればご指摘ください。 selenityさんと私の先述の内容差は CGIをCGI設置推奨の共通デフォルトディレクトリで行うか否かの違いです。

jincyan
質問者

補足

再起動は常にしております。(あしからず・・) >各ユーザ用ディレクトリ(/home/*/WWW)の下層の任意ディレクトリでCGIを実行させたい その通りです。 では・・どうすればよろしいのでしょうか? よろしくお願いいたします。

  • acky
  • ベストアンサー率31% (182/583)
回答No.4

cgi-binディレクトリのパーミッションが751になっていなかったら、そのように修正してみてください。

noname#2503
noname#2503
回答No.3

CGIはPerlでしょうか? httpd.confが設定されているとします。 CGIの最初のパスはどうなっていますか? perlのパスが違ってたりします。 CGIの一番上のところを #!/usr/bin/perl にしてみてはどうでしょう??

jincyan
質問者

補足

CGIはPerlです。ちゃんとperlのあるパスになってます。

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.2

好みのディレクトリにてCGIを実行させたいのであれば、それぞれのディレクトリに対してもCGIの実行許可を与える必要があります。(基本は httpd.conf に記述します) 例えば、DocumentRoot下層以外の個人ディレクトリWWWルート(例:/home/ユーザ名/public_html)下層でも実行可能にしたいのであれば、 UserDir public_html の記述と、 <Directory "/home/*/public_html"> ~ Options ExecCGI ~ </Directory> の記述がされているかどうかを確認してみてください。

jincyan
質問者

補足

UserDirがWWWなので<Directory "/home/*/WWW">にしました。他のオプションもついていましたが、 ExecCGIを追加しましたが駄目でした。

関連するQ&A

  • redhat 7.0 でApacheでCGI

    今、ApacheでWEBサーバーつくったのはいいでんすが、なぜかどのCGIも動きません。Internal Server Eroor がでます。 おそらくhttpd.confの設定だろうと思うのですが、どうやってもうまくいきません。 ちなみにCGIの中身はちゃんとチェック済みです(フリーのCGIスクリプトを3っつくらいためしました)あと、パーミッション設定もチェック済みで、テキストをただ表示させるだけのCGIすら動きません。 よければどなたかhttpd.confの中身のせときます。 どなたかアドバイスと、くわしくhttpd.confの設定がのってるサイトを教えていただけないでしょうか? あと、できればWebminでの設定方法を知っている方おしえていただけないでしょうか? http://ks-pro.dns2go.com/httpd.conf.txt

  • apache でバイナリのCGIを動かすには

    apache でバイナリのCGIを動かすにはどうすればよいのでしょうか? (なお、プログラム自体に問題は決してありません。『HTTPD』を使うと問題なく動作します) OS:WIN98 C++バイナリのCGIを呼び出すと下記エラーとなります。 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please .... the error. More ... log. - Apache/1.3.12 Server at http://127.0.0.2/ Port 80 最終アクセスログ 127.0.0.1 - - [12/Mar/2001:23:20:27 +0900] "GET /ab.cgi HTTP/1.1" 500 610 最終エラーログ [Mon Mar 12 23:20:25 2001] [error] [client 127.0.0.1] Premature end of script headers: e:/www.homepage/kokucho81/ab.cgi apache の httpd.conf と httpd.conf.default との比較 ** httpd.conf ServerName http://127.0.0.2/ ** httpd.conf.default #ServerName new.host.name ** httpd.conf DocumentRoot "E:/WWW.HOMEPAGE/KOKUCHO81" ** httpd.conf.default DocumentRoot "C:/Apache/htdocs" ** httpd.conf <Directory /> Options FollowSymLinks ExecCGI AllowOverride None ** httpd.conf.default <Directory /> Options FollowSymLinks AllowOverride None ** httpd.conf <Directory "E:/WWW.HOMEPAGE/KOKUCHO81"> ** httpd.conf.default <Directory "C:/Apache/htdocs"> ** httpd.conf Options Indexes FollowSymLinks ExecCGI ** httpd.conf.default Options Indexes FollowSymLinks MultiViews ** httpd.conf AddHandler cgi-script .cgi ** httpd.conf.default #AddHandler cgi-script .cgi そもそも、設定が足りてないんでしょうか? apacheを良く使う方、よろしくお願いします。m(_ _)m

  • 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のCGI設定について教えてください。

    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 の設定の問題かと思っています。 ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • apacheでCGIを動かす

    apacheでCGIを動かそうと思っていますが、どうしても出来ません。 環境は以下の通りです。 apache:1.3.35 OS:Windows2000 httpd.confの設定は 1.ScriptAlias /cgi-bin/ の行をコメントアウト 2.Alias /cgi-bin/ "E:/hoge/cgi-bin/"に変更してDirectoryタグを追加 3.AddHandler cgi-script .exeを追加 以上の3点をしましたが、新しく設定したディレクトリのcgiは動作しませんでした。 apacheのmodulesディレクトリの中にmod_alias.soというファイルが有りませんがそれは関係有るのでしょうか? また、apacheとtomcatの連携ということを以前行ったのですが、動かない事と関係あるのでしょうか? 文字数の関係で見づらい説明になっているかと思いますがよろしくお願い致します。

  • 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

  • 【apache】httpd.confのAddHandlerについて

    掲示板利用させていただきます。 apacheとphpの連携を行う際、httpd.confのAddHandlerを以下のように設定すると、httpでphpを呼び出した際、以下のエラーがでます。 ●設定内容 AddHandler cgi-script .cgi .php ●エラー内容 Premature end of script headers 以下のように設定し直すと、正常に利用できるようになります。 ●設定内容 AddHandler cgi-script .cgi phpとcgiはイコールだと思っていたのですが、違うのでしょうか?? どなたかご教示ください。 よろしくお願いします。

  • Apacheでのcgi使用についてなんですが・・・

    windowsPCにApacheを組み込んでWWWサーバーとして使用していますが一つ問題が発生したのでどうかお力を分けてくださらないでしょうか? その問題というのは、Apacheで掲示板のcgiが使えないのです。httpd.confをcgiが使えるように書き換えましたし、別のAN HTTPDというサーバーソフトではちゃんと掲示板として機能します。cgi-binの中はcgiが使えるように設定したのですがやはりcgi-bin/bbs/bbs.cgiとするとCGIは動かなくなるのでしょうか?

  • apacheで自宅サーバー cgi設置ができません。

    はじめまして。 よろしくおねがいします。超初心者です。インターネットで色んな サイトをみながら、苦労してサーバーを立ち上げました。 どう調べてもさっぱりわからないことがありまして........ どなたかご教授いただきたくメールさせていただきました。 よろしくお願いいたします。 【質問です】 XPにapacheをインストールして、サーバーを運営中です。 Tinyftpdもインストールして、ftpサーバーも運営中です。 自サイトにcgiファイルを置いてるのですが、全てのファイルの パーミッションが505になり所有者は、nooneになってしまいます。 ffftpで、パーミッションを変更してみたのですが、何度変更しても 505から変わりません。いったいどうすればいいのでしょうか? cgi-binフォルダを作って、httpd.confの設定も間違っていない みたいなのですが、 Forbidden You don't have permission to access..............on this server. となってしまいます。 パーミッションをapacheサーバーで設定できるようにするには、 どうすれば良いのでしょうか?

    • 締切済み
    • CGI
  • apacheでcgi

    AddHandler cgi-script .cgiを有効にして.htaccess の中にOptions +ExecCGIAllを記述してhttpd.confのowOverride Options としてcgiを実行しようとしたら下記エラーになりました。 [Thu Nov 15 11:16:54 2001] [error] (13)許可がありません: exec of /home/jin/WWW/cgi-bin/tslbbs.cgi failed [Thu Nov 15 11:16:54 2001] [error] [client 192.168.0.9] Premature end of script headers: /home/jin/WWW/cgi-bin/tslbbs.cgi それで、 #AddHandler cgi-script .cgi として、 <Directory /home/*/WWW> Options ExecCGI </Directory> にしたら cgiのソースが見えてしまいます。 cgiのPermissionsは755になっております。 ScriptAliasで/cgi-bin/ /home/*/WWW/cgi-bin/を記述してOptions ExecCGIにしてもソースが見えてしまいます。 cgiを実行させるのにはどうすればいいのでしょうか?? (以前Linuxを良くわからないときに(今でも解っていませんが・・)同じような質問をここに挙げてその時は単純な自分の間違いで動かなかったのですが単純なソースのミスでした。それで今度はLinuxをインストールをしなおしたら動かなくなったのです。 http://apachetoday.com/news_story.php3?ltsn=2000-06-05-001-10-NW-LF-SW 等覗いてそれをやっても動かないのです。 多分単純なことなのかもしれませんが行き詰まって困っております。 昨日の質問でユーザーのHTMLが見れないのはURLの指定で最後に'/'をつければ問題なく見れました。今はイントラネットでLinuxを動かしているのですが、実際のインターネットでは最後の/は入れたり入れなかったりでも問題なく見れるのですが、正しくは最後に/を入れるみたいですね。)