- ベストアンサー
LinuxのapacheでCGIが動かない
RedHatLinux7でイントラネットでWebサーバーを構築しました(apache)で、CGIを動かしたいのですが、動きません。あるサイトで「httpd.conf の AddHandler cgi-script .cgiを生かせばいい」となっていたのでそうしましたが、まだ動きません。あと何を設定すれば良いのですか?(CGIのパーミッションはちゃんとしています。)httpd.confにCGIの記述が他にもありましたが意味がわからずそのままにしています。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
デフォルトの設定が分からないので確認点だけ、、、 ・ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" ・AddHandler cgi-script .cgi ・<Directory [ScriptAliasで指定したディレクトリ]> Options ExecCGI httpd.confの設定は以上です。 あとは、CGIファイルに「実行属性(x)」パーミッション が付いているか確認してください。 P.S. どのようなエラーメッセージが出ているのかが 分かれば、およその見当がつくのですが、、、
その他の回答 (10)
- NINJA104
- ベストアンサー率43% (133/306)
むずかしいですねぇ... となると、該当のCGIスクリプトの中でinclude又はsystem呼出しを行っている追加スクリプトや実行プログラムが見付からないのかもしれません。 jcode.plやnkf等の追加ツールを使用する様なCGIスクリプトになっておりませんか? もしそれらがサーバ上に存在していたとしても、apacheの実行ユーザ(デフォルトでは"apache"の筈)のパスの通っているディレクトにいなければ動作しません。 CGIスクリプトと同一のディレクトリにそれらも一緒に置くか、またはCGIスクリプトの中で夫々を呼び出している記述を個々の絶対パスに書き換える必要があります。
お礼
お騒がせして申し訳ありませんでした。 perlの存在場所を正しく記述していたはずでしたがもう一度見ると間違えておりましたので修正して動かしたら正常に動作しました。 エラーの意味をよくよく考えればそういう意味だったみたいです。(笑) apacheのコンフィグが間違っているとばかり思っていたのですが・・・単純なエラーでした。(笑)
- NINJA104
- ベストアンサー率43% (133/306)
では、最後に一つ以下の点を確認してください。 sambaで転送したperlスクリプトの改行コードは LF になっていますか? 私の経験では、CR+LF(Win系) や CR(Mac系)のままだと動作致しません。 (エラーとしては、コード501の Internal Server Error が出る筈なのでちょっと違うかな... ) 此れでも違う様でしたら、現物を直接チェックしていかないと私も此れ以上は思い付きません。m(_'_;m
補足
NINJYA104さんの補足に書いているエラーはapacheのエラーLOGの内容です。直接URLにCGIのあり場所を記述したら「エラーです管理者に相談するかエラーLOGに書いてある」と出るので見てみたら、そんな内容でした。sambaで転送して駄目ならFTPで転送しても同じ結果です。スクリプトの実行でファイルがないと怒っているのが何なのかがわかりません。 以前インターネットでCGIを挙げたとき他のユーザーの所に無理やり入れたらCGIが動かなかったことがあります。(それとは今回は関係ないのかな?)
- h_hikita
- ベストアンサー率40% (104/257)
/home/jin/WWW/cgi-bin/cnt.cgi に実体があるのなら、 http://www.foobar.org/~jin/cgi-bin/cnt.cgiで 参照するもののような気がするのですが???
- NINJA104
- ベストアンサー率43% (133/306)
>エラーLOGをみると「そんなファイルまたはディレクトリーがない」 というログとsambaで転送したという事ですが、もしかしてCGIファイル名の拡張子が ~.CGI ← 大文字 になっていませんか? unixは大文字と小文字を区別しますので、大文字のファイル名でも実行可能にさせたい場合は、 > AddHandler cgi-script .cgi .CGI と、書き足してあげるか、または必ず小文字に直せば良いでしょう。
補足
エラーの内容は下記です。 [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)
間違っていたらごめんなさい。 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)
/home/wwww/cgi-bin/の下においていますか?
補足
selenityさんのエラーの質問ですが、エラーLOGをみると「そんなファイルまたはディレクトリーがない」というエラーです。しかしながら現実には存在しています。転送をsambaで行ったのですが・・その辺に問題があるのでしょうか?(このCGIはインターネット上では正常に動作しております。) ken2さんの質問は置いている場所は /home/ユーザー/WWW/cgi-bin の下です。 ファイル名をちゃんと認識すれば上手く動作するのではないかと思います・・
- NINJA104
- ベストアンサー率43% (133/306)
基本のお話になりますが、httpd.conf を書き換えた場合、その内容を反映させるには apache(httpd)を再起動させないといけませんが、行っておりますか? 単純にスーパーユーザー(su)にてコンソール又はターミナルのコマンドラインから /etc/init.d/httpd restart とタイプすればOKです。 話しの流れから 各ユーザ用ディレクトリ(/home/*/WWW)の下層の任意ディレクトリでCGIを実行させたいのだと推測されますが、その辺りの認識誤りが有ればご指摘ください。 selenityさんと私の先述の内容差は CGIをCGI設置推奨の共通デフォルトディレクトリで行うか否かの違いです。
補足
再起動は常にしております。(あしからず・・) >各ユーザ用ディレクトリ(/home/*/WWW)の下層の任意ディレクトリでCGIを実行させたい その通りです。 では・・どうすればよろしいのでしょうか? よろしくお願いいたします。
- acky
- ベストアンサー率31% (182/583)
cgi-binディレクトリのパーミッションが751になっていなかったら、そのように修正してみてください。
CGIはPerlでしょうか? httpd.confが設定されているとします。 CGIの最初のパスはどうなっていますか? perlのパスが違ってたりします。 CGIの一番上のところを #!/usr/bin/perl にしてみてはどうでしょう??
補足
CGIはPerlです。ちゃんとperlのあるパスになってます。
- NINJA104
- ベストアンサー率43% (133/306)
好みのディレクトリにてCGIを実行させたいのであれば、それぞれのディレクトリに対してもCGIの実行許可を与える必要があります。(基本は httpd.conf に記述します) 例えば、DocumentRoot下層以外の個人ディレクトリWWWルート(例:/home/ユーザ名/public_html)下層でも実行可能にしたいのであれば、 UserDir public_html の記述と、 <Directory "/home/*/public_html"> ~ Options ExecCGI ~ </Directory> の記述がされているかどうかを確認してみてください。
補足
UserDirがWWWなので<Directory "/home/*/WWW">にしました。他のオプションもついていましたが、 ExecCGIを追加しましたが駄目でした。
補足
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"の "/usr/local/apache/cgi-bin/"は何を設定するのですか?(初心者なので申し訳ありません。)apacheのところがwwwになっていました。それでOptions ExecCGI は追加しました。でも動きません。CGIファイルに「実行属性(x)」パーミッションはついています。 NINJA104さんの回答との違いは何でしょうか?どちらもやりましたが・・まだ駄目でした。