Top過去ログ目次掲示板

作成日:2003年07月03日 作成:おやじ
掲示板で過去に質問された内容です。

No.1166 cgiで質問させてください。


No.1166 投稿時間:2003年07月03日(Thu) 21:55 投稿者名:ひろ URL:
タイトル:cgiで質問させてください。

レッドハット9を使っています。またレッドハット8でも同じ現象でした。
いろんな掲示板のプログラムを設置していますが、書き込みをしたらどのPCから接続しても既に名前のところに最後に書きこみをした人の名前が入っていたり、一度管理画面に入るとどのPCからも管理画面に入れてしまいます。また管理画面から削除しても復活していたり、何度も同じメッセージが書きこみされたりグチャグチャな状態になってしまっています。
そこで、ある解決用のHPを見つけて以下のように編集しservice httpd restartを実行すると下記のように編集したprel.confをエラーとして再起動できません。
以下perl.confの編集

# LoadModule perl_module modules/mod_perl.so  ・・・コメント化する

# Alias /cgi-bin /var/www/cgi-bin  ・・・コメント化する
Alias /mod-perl /var/www/mod-perl  ・・・追加する

<Directory /var/www/mod-perl>    ・・・書き換え
SetHandler perl-script
PerlHandler ModPerl::Registry::handler
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>

参考にしたページです(>_<)↓
http://cbn.plala.jp/linux/mod-perl.htm

パーミッションも変更してますし、httpd.confも文字化けを直すために一回編集したくらいです。
cgiのプログラムに原因があるのか、よくわかりません(>_<)
最初はurl/cgi-bin/bbs/bbs.cgiさへも開きませんでしたが、パールをフルパスで指定してやっと開いたと思ったらキャッシュが変な事態になってしまって・・・(>_<)
いろんなHPを探したのですが、方法が見つかりませんでした(>_<)
よろしくお願いします(>_<)


No.1167 投稿時間:2003年07月03日(Thu) 23:35 投稿者名:おやじ URL:http://www.aconus.com/~oyaji/
タイトル:おやじはソースからなのと、mod_perl未使用なのでよくわかりません。

こんばんは。

> そこで、ある解決用のHPを見つけて以下のように編集しservice httpd restartを実行すると下記のように編集したprel.confをエラーとして再起動できません。
> 以下perl.confの編集
>
> # LoadModule perl_module modules/mod_perl.so  ・・・コメント化する
>
> # Alias /cgi-bin /var/www/cgi-bin  ・・・コメント化する
> Alias /mod-perl /var/www/mod-perl  ・・・追加する
>
> <Directory /var/www/mod-perl>    ・・・書き換え
> SetHandler perl-script
> PerlHandler ModPerl::Registry::handler
> PerlOptions +ParseHeaders
> Options +ExecCGI
> </Directory>
>
> 参考にしたページです(>_<)↓
> http://cbn.plala.jp/linux/mod-perl.htm

 おやじは、ソースから必要最小限のものしか入れてませんし、mod_perlも使っていないのでなんともよくわかりません。現状、とくに問題は発生していません。こちらのページのとおりですと、perl.confを全てコメントアウトするか、perl.conf.oldあたりにリネームすれば、うまくいきませんか? cgi-binにCGIを置いているのですよね。
 なお、perl-5.8系と5.6系でも変更が入っていて、今まで動いていたCGIが動かないことがあります。snortが動きませんでした。あまり凝った書き方をしていなければ大丈夫とは思いますが。


No.1168 投稿時間:2003年07月04日(Fri) 00:01 投稿者名:ひろ URL:
タイトル:Re: おやじはソースからなのと、mod_perl未使用なのでよくわかりません。

お返事ありがとうございます。
>  おやじは、ソースから必要最小限のものしか入れてませんし、mod_perlも使っていないのでなんともよくわかりません。現状、とくに問題は発生していません。こちらのページのとおりですと、perl.confを全てコメントアウトするか、perl.conf.oldあたりにリネームすれば、うまくいきませんか? cgi-binにCGIを置いているのですよね。
>  なお、perl-5.8系と5.6系でも変更が入っていて、今まで動いていたCGIが動かないことがあります。snortが動きませんでした。あまり凝った書き方をしていなければ大丈夫とは思いますが。

cgi-binに置いてます。
perl.confをコメントアウトすると/url/cgi-bin/bbs/bbs.cgiにつながらなくなります。
perl.conf.oldってなんでしょうか??見あたりません。
最近のレッドハットはmod-perlが標準で使われているとどこかで読んだ記憶があります。
今現在自分の設定がどっちなのかもわからないし、原因がmod-perlなのかもわからない状態です。
cgiはprel5で作られた新しいものも試しましたが、同じ現象でした。
設定で変わったところといえば、パールをフルパスで指定したくらいです。


No.1174 投稿時間:2003年07月04日(Fri) 19:10 投稿者名:おやじ URL:http://www.aconus.com/~oyaji/
タイトル:闇雲にいじりすぎ?

こんばんは。

> cgi-binに置いてます。
> perl.confをコメントアウトすると/url/cgi-bin/bbs/bbs.cgiにつながらなくなります。
> perl.conf.oldってなんでしょうか??見あたりません。

httpd.confで、conf.dディレクトリ配下の*.confを読み込むように設定されているので、だったら、.oldという名前にすれば読み込まないので、いちいちコメントアウトするより早いので、リネームしてはとどうかというつもりで書いたものです。

> 最近のレッドハットはmod-perlが標準で使われているとどこかで読んだ記憶があります。
> 今現在自分の設定がどっちなのかもわからないし、原因がmod-perlなのかもわからない状態です。

 perl.confの中でデフォルトで

 LoadModule perl_module modules/mod_perl.so

とコメントアウトされていませんよね。これで、mod_perlをDSOモジュールとして組み込んでいるので、標準で組み込まれています。コメントアウトすれば、組み込まれません。

> cgiはprel5で作られた新しいものも試しましたが、同じ現象でした。
> 設定で変わったところといえば、パールをフルパスで指定したくらいです。

 設定をあちこちいじりすぎて、全体の設定がミスマッチになっていませんかね。よく分からないときは、一つずつ修正していかないと分けが分からなくなりますよ。
間違いないはずなので、バックアップ機のRedHat標準のApacheで試験しましたが、何も問題ありません。チョコチョコ(4〜5個所)と少し設定をして、perl.confはデフォルトのまま(mod_perl使用)起動して、cgi-binフォルダおよびドキュメントルートに置いたこのbbsは何ら問題なく動作しました。perl.confをperl.conf.bakとしてmod_perlを読み込まないようにしても結果は同じで問題ありません。
 まず、症状からすると、壊れるのはmod_perlが原因なのでしょう。kentさんのbbsはそんなに凝ったつくりではありませんから、影響がないのだと思います。
 以下の順番で試験してみてはどうですか。
1.perl.confは全てコメントアウトしてmod_perlを使わないようにする。
2.下記を、test.cgiとして作成し、ドキュメントルートに置いてアクセスしてみる。パーミッションは755にすること。

 #!/usr/bin/perl
 print "Content-Type: text/html\r\n";
 print "Hello!!\r\n";

 Hello!!と表示されたら次にいく。404なら置いてある場所がアクセス方法とミスマッチしている。CGIが見えてしまうなら、
 「AddHandler cgi-script .cgi」がコメントアウトされている。500エラーは出ないはず。出るなら、改行コード(LFになっていない)がおかしい可能性がある。
3.問題が無くなったら、test.cgiを/cgi-bin/配下において、http://xxx.xxx.xxx/cgi-bin/test.cgiでアクセスしてみる。
 これで、Hello!!と表示されたら、使用しているCGIが標準的設定のcgi-binに置くと問題が出るCGIの可能性が大きい。もともと、cgi-binにはcgiしか置かないことを前提に設定されているので、配布CGIの中にgif等の画像やhtmlがあるとそれもcgiとして動かそうとするので、エラーになる。その場合、どうしてもcgi-bin配下で動かしたいなら、下記のようにAddHandlerでgifはイメージだよと宣言してあげればよい。他のものもあるなら、/etc/mime.typesを参考に、AddHandler行を追加すればよい。

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
AddHandler image/gif .gif
</Directory>

今、言えるのはこれくらいですか。繋がらないとか、動かないとか表現が具体的でない(エラー500でとかあればまだ絞りこめるのですが・・・)ので断定はできませんが、恐らく3番だと思いますが。


No.1178 投稿時間:2003年07月06日(Sun) 00:06 投稿者名:ひろ URL:
タイトル:Re: 闇雲にいじりすぎ?

お返事ありがとうございます。

まず、perl.confを全てコメントアウトしてhttpd restartを実行。
test.cgiをドキュメントルート(127.0.0.1/test.cgi)で実行すると403エラーがでます。

AddHandler cgi-script .cgiはコメントアウトしない設定。

ここで躓いています(>_<)
test.cgiは755にしてますし、改行コードも秀丸というたぶん信頼できるソフトで作りました。

PS bbsに使用したのはkentさんのbbsで、Anhttpdで使用してたときは正常に動作していたものです。


また以下の設定にするとtest.cgiは動きます。

perl.confを下記の設定にしてcgi-binに置く。

LoadModule perl_module modules/mod_perl.so


Alias /cgi-bin /var/www/cgi-bin

<Directory /var/www/cgi-bin
SetHandler perl-script
PerlHandler ModPerl::Registry::handler
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>


以上よろしくお願い致します(>_<)

どうして?こんなことになっているのかわかりません。闇雲にいじりすぎているといわれましたが、全然いじくってないです(>_<)


No.1179 投稿時間:2003年07月06日(Sun) 00:50 投稿者名:おやじ URL:http://www.aconus.com/~oyaji/
タイトル:ドキュメントルートでの失敗は、おやじの条件設定ミスです。

こんばんは。

> まず、perl.confを全てコメントアウトしてhttpd restartを実行。
> test.cgiをドキュメントルート(127.0.0.1/test.cgi)で実行すると403エラーがでます。
>
> AddHandler cgi-script .cgiはコメントアウトしない設定。
>
> ここで躓いています(>_<)
> test.cgiは755にしてますし、改行コードも秀丸というたぶん信頼できるソフトで作りました。

 ごめんなさい。これはおやじのミスです。デフォルトでは、ドキュメントルートではCGIは動きません。
下記のように、ドキュメントルートのOptionsにExecCGIを追加しないと動きません。

<Directory "D:/Apache2/htdocs">

(snip)

Options FollowSymLinks ExecCGI

従って、これは試験しなくてもOKでしょう。

> PS bbsに使用したのはkentさんのbbsで、Anhttpdで使用してたときは正常に動作していたものです。

そもそもANHTTPdとApacheはCGIが動く条件が違います。顕著なのは、先頭行のperlへのパス指定です。Apacheはしっかりとあっていないと動きませんが、ANHTTPdは拡張子さえ.cgiならパスが書いてなくても動くようです。
思い込みは、問題解決を混乱させる例だと思います。おやじもよくミスします。

> また以下の設定にするとtest.cgiは動きます。
>
> perl.confを下記の設定にしてcgi-binに置く。
>
> LoadModule perl_module modules/mod_perl.so
>
>
> Alias /cgi-bin /var/www/cgi-bin
>
> <Directory /var/www/cgi-bin
> SetHandler perl-script
> PerlHandler ModPerl::Registry::handler
> PerlOptions +ParseHeaders
> Options +ExecCGI
> </Directory>

ということは、cgi-bin配下でCGIは動く条件になっているということです。但し、前に言ったようにbbsのCGIではデータが壊れたり、うまく動かないのだとすると、mod_perlでは使いたいCGIが動かないということではないでしょうか?
どのCGIですか?画像系は入ってませんか?入っているなら、前回の3番をやってみたでしょうか?


No.1180 投稿時間:2003年07月07日(Mon) 23:29 投稿者名:ひろ URL:
タイトル:Re: ドキュメントルートでの失敗は、おやじの条件設定ミスです。

こんばんは。お返事おくれてすいません。

> ということは、cgi-bin配下でCGIは動く条件になっているということです。但し、前に言ったようにbbsのCGIではデータが壊れたり、うまく動かないのだとすると、mod_perlでは使いたいCGIが動かないということではないでしょうか?
> どのCGIですか?画像系は入ってませんか?入っているなら、前回の3番をやってみたでしょうか?

前回の3番を実行してみましたところエラー500が出てしまいました。。
perl.confは全てコメントアウトしています。
どのような状況なのでしょうか。
またアドバイスよろしくおねがいいたします。


No.1182 投稿時間:2003年07月08日(Tue) 00:23 投稿者名:おやじ URL:http://www.aconus.com/~oyaji/
タイトル:とりあえず考えられるのは3点です。

こんばんは。

 500エラーで考えられる原因は、下記ぐらいでしょうか? 原稿のコピペなので表現はご容赦を。2は無いと思うので、1と3でしょうか?
Apacheのログを良く見るとヒントが出ているはずです。

1.CGIの先頭にあるperlへのパスが誤っている。

インターネットで流通しているフリーのCGIの多くは、perlへのパスは、「#!/usr/local/bin/perl」となっている。しかし、例えばRedHat標準のperlのパスは、「/usr/bin/perl」であり、修正が必要である。

CGIを使用する場合は、まず、perlへのパスを確認し、自分のシステムに合わせること。

2.CGIそのものに問題がある。

この場合、切り分けのため下記のような簡単なテスト用CGIを、「test.cgi」等の適当な名前で元のCGIと同じ場所に置いてアクセスしてみるとよい。このCGIは、おやじがプロバイダのサーバに置いてDDNSの更新に使用しているCGIで、DiCEにスクリプトとして登録しているものである。アクセス元のアドレスを返送するだけの簡単なものである。このCGIにアクセスしたとき、「Your_IP=xxx.xxx.xxx.xxx」とアクセス元のアドレスが表示されれば、元のCGIが壊れているか、改行コード問題等で実行できなくなっているので、調査する。

[テスト用CGI例]  #!/usr/local/bin/perl
 print "Content-Type: text/html\r\n";
 print "Your_IP=$ENV{'REMOTE_ADDR'}\r\n";

3.CGIの改行コードが違っている。(Linuxのみ)

Windowsの改行コードは 「CR+LF」、これに対してLinuxの改行コードは「LF」のため、。たったこれだけですが、CGIは動いてくれません。おやじパソコンのエディタのデフォルトの改行コードを変更して、CGIスクリプトをダミー更新すると、やっとこの場合、切り分けのため下記のような簡単なテスト用CGIを、「test.cgi」等の適当な名前で元のCGIと同じ場所に置いてアクセスしてみるとよい。このCGIは、おやじがプロバイダのサーバに置いてDDNSの更新に使用しているCGIで、DiCEにスクリプトとして登録しているものである。アクセス元のアドレスを返送するだけの簡単なものである。このCGIにアクセスしたとき、「Your_IP=xxx.xxx.xxx.xxx」とアクセス元のアドレスが表示されれば、元のCGIが壊れているか、改行コード問題等で実行できなくなっているので、調査する。



掲示板▲頁先頭