はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2018/05/30
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> 当サイト情報 >> スレッド

????????????????????¨????°???¨??§????????°???????¨??????¬???????????°?????±??????????????§??????

このスレッドはクローズされています。記事の閲覧のみとなります。

 CGIが動かない理由が解らない
????????? 2013/12/15 22:44
????????? yoshida

1.不明点・障害内容:動くCGIと動かないCGIがある
2.ログの有無   :無
  (有:その内容) :
3.Distribution  :Cent
      Version :6.2
4.Service Name  :
      Version :
5.ネットワーク構成:

 お世話になります。さくらインターネットのVPSでホームページを運用しています。
今までは何事もなく動いていたあるCGIが突然動かなくなりました。他のCGIは正常に
動いており、掲示板なども問題なく動作しています。
そこで、こんなCGIをテスト用に書いてみました。

#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
print "<HTML>?n<BODY>?n<TITLE>CGI Script TEST</TITLE>?n</BODY>?n";
print "The CGI script was worked!?n</HTML>?n";

これをあちこちのディレクトリに転送して動作を確認しているのですが、
すでに正常動作しているディレクトリに転送しても動作しません。
もちろんperlのパスはあっていますしパーミッションも755にしています。
そのディレクトリに置いている掲示板は正常動作しています。
これまでにもCGIは色々設置した経験があり、いずれも正常動作しています。
なぜなのか、さっぱりわけが解りません。
どなたか、なにか思い当たる理由があれば教えて下さい。

エラーは500 internal server errorです。

■ コンテンツ関連情報

 Re: CGIが動かない理由が解らない ( No.1 )
????????? 2013/12/16 06:35
????????? stranger
?????§??? http://ja.528p.com/

#!/usr/bin/perl
print "Content-type: text/html?n?n";
print "<HTML>?n<BODY>?n<TITLE>CGI Script TEST</TITLE>?n";
print "The CGI script was worked!?n</BODY>?n</HTML>?n";

perlの位置はCentOSのrpmパッケージの位置
(これは自分の環境に合わせる)
</BODY>の位置が違うと思うよ
 Re: CGIが動かない理由が解らない ( No.2 )
????????? 2013/12/16 10:50
????????? アメリカン

いちいち申し訳ありませんが、普通、<title>は<body>の中じゃなくて、<head>というタグの中に入れます。

もっとも、テストするだけならタグ無しで
#!/usr/bin/perl
print "Content-type: text/html?n?n";
print "This CGI script is working now.";
とかでも出ます。

VPSならコンソールが使えるだろうから、Perlのパスはコマンドで調べる。
# whereis perl

Internal Server Errorはブラウザー側で出るエラーだろうから、
詳しく見るにはapacheのエラーログを見るのが正解。
 Re: CGIが動かない理由が解らない ( No.3 )
????????? 2013/12/16 12:37
????????? stranger
?????§??? http://ja.528p.com/

そうですね
html文ではなく perlの位置と ファイルのユーザ・グループ・パーミッションの問題ですね

perlは実体を/usr/local/binにシンボリックリンクを作っておけばいちいち書き換えなくてもすむし、
perlの記述法を間違えなければ printで表示されますよね
 Re: CGIが動かない理由が解らない ( No.4 )
????????? 2013/12/16 16:24
????????? yoshida

strangerさん、アメリカンさんありがとうございます。
test.cgiは修正しました。
これを現在正常動作している掲示板のCGIがあるディレクトリに置いても
動作しません。
perlのパスはシンボリックリンクを張っているので、

# which perl
/usr/local/bin/perl

となります。
この状態で同じディレクトリにある掲示板が正常動作して、
test.cgiが動かない理由が解らないのです。
 Re: CGIが動かない理由が解らない ( No.5 )
????????? 2013/12/16 16:48
????????? stranger
?????§??? http://ja.528p.com/

その掲示板はCGIスクリプトなんですか
perlで動いていますか
ファイルのユーザ・グループ・パーミッションを調べてみてください

apacheが標準でcgi-binを用意していると思うけど
そこに入れたらどうなりますか
パーミッションは755実行権が必要
 Re: CGIが動かない理由が解らない ( No.6 )
????????? 2013/12/16 17:37
????????? Johann

すでに指摘されてるけど、apacheのエラーログを見るのが正解。
何かしらヒントが必ず出てる。
 Re: CGIが動かない理由が解らない ( No.7 )
????????? 2013/12/16 18:29
????????? yoshida

strangerさん

> その掲示板はCGIスクリプトなんですか
> perlで動いていますか


 動いている掲示板はもちろんperlスクリプトです。

> ファイルのユーザ・グループ・パーミッションを調べてみてください

 ユーザ・グループ・パーミッションとも動いてるCGIもtest.cgiも
同じになっています。

> apacheが標準でcgi-binを用意していると思うけど
> そこに入れたらどうなりますか


 現在は/var/www/html/cgi-binを作ってその中に入っています。ほとんどすべての
CGIは正常に動作しています。正常動作しているディレクトリに先のtest.cgiを
置いても動かないのがなぜなのか解りません。
現在はhttp://www.hostname/cgi-bin/directory/test.cgiとして呼んでいますが
www直下のcgi-binにアクセスする方法が解りません。
LINUXの技術とは少し外れているかもしれませんがよろしくお願い致します。
 Re: CGIが動かない理由が解らない ( No.8 )
????????? 2013/12/16 18:42
????????? yoshida

Johanさん

> すでに指摘されてるけど、apacheのエラーログを見るのが正解。
> 何かしらヒントが必ず出てる。


[Sun Dec 08 03:51:15 2013] [notice] Digest: generating secret for digest authent
ication ...
[Sun Dec 08 03:51:15 2013] [notice] Digest: done
[Sun Dec 08 03:51:15 2013] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- res
uming normal operations
[Sun Dec 15 03:52:15 2013] [notice] SIGHUP received. Attempting to restart

 /etc/httpd/logs/error_log-20131215にはこれしか出ていませんでした。
 Re: CGIが動かない理由が解らない ( No.9 )
????????? 2013/12/17 00:27
????????? アメリカン

> 現在は/var/www/html/cgi-binを作ってその中に入っています。ほとんどすべての
>CGIは正常に動作しています。正常動作しているディレクトリに先のtest.cgiを
>置いても動かないのがなぜなのか解りません。
>現在はhttp://www.hostname/cgi-bin/directory/test.cgiとして呼んでいますが
>www直下のcgi-binにアクセスする方法が解りません。


cgi-binというディレクトリはデフォルトでScriptAliasされてます。
(↓httpd.confの抜粋)
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

だから、http://www.hostname/cgi-bin/directory/test.cgi にアクセスすると
/var/www/cgi-bin/directory/test.cgi を探しに行きます。
(/var/www/html/cgi-bin/directory/test.cgiではありません)

以上が関係しているのかもしれませぬわん。
 Re: CGIが動かない理由が解らない ( No.10 )
????????? 2013/12/17 09:59
????????? yoshida

> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

httpd.confを見ると、この行はコメントアウトになっていました。

> だから、http://www.hostname/cgi-bin/directory/test.cgi にアクセスすると
> /var/www/cgi-bin/directory/test.cgi を探しに行きます。
> (/var/www/html/cgi-bin/directory/test.cgiではありません)

 
var/www直下のcgi-binには何もありません。空のディレクトリです。
呼び出されて動いているのは、/var/www/html/cgi-bin内のスクリプトです。
リンクはhttp://www.hostmname/cgi-bin/directory/*.cgiとしてあります
試しにScriptAliasの行のコメントを外してhttpdを再起動させてみましたが
従来通り正常に動作します。なんだかよけいにわけが解らなくなってきました。
 Re: CGIが動かない理由が解らない ( No.11 )
????????? 2013/12/17 10:01
????????? 管理者

下記パスの配下に定義されていませんか?
/etc/httpd/conf.d

「httpd.conf」はメインの設定ファイルで、「/etc/httpd/conf.d/*」はインクルード設定になります。

あと、正常にPerlが動作しているパスに、試験用のPerlを設置しても試験用のPerlが動作しないと言うことですか?
 Re: CGIが動かない理由が解らない ( No.12 )
????????? 2013/12/18 19:09
????????? yoshida

> 下記パスの配下に定義されていませんか?
> /etc/httpd/conf.d


 /etc/httpd/conf.dの中には、README、mod_dnssd.conf、php.conf、proxy_ajp.conf、welcome.confが
ありますが、aliasの設定と思われるものはありません。

> あと、正常にPerlが動作しているパスに、試験用のPerlを設置しても試験用のPerlが動作しないと言うことですか?

 そういうことなんです。
var
 |
 www
  |
  html
    |
    cgi-bin
      |
     directory
      a.cgi
      test.cgi

 このように設置して、a.cgiは動作しているのに、先のtest.cgiは
500 internal server errorになってしまいます。


 Re: CGIが動かない理由が解らない ( No.13 )
????????? 2013/12/17 10:36
????????? 管理者

下記の実行結果を教えていただけますか?

# getenforce
 Re: CGIが動かない理由が解らない ( No.14 )
????????? 2013/12/17 10:41
????????? yoshida

> 下記の実行結果を教えていただけますか?
> # getenforce


#getemforce
Disabled

となります。
 Re: CGIが動かない理由が解らない ( No.15 )
????????? 2013/12/17 12:03
????????? アメリカン

>/etc/httpd/logs/error_log-20131215にはこれしか出ていませんでした。

リンクで同じですが、
/var/log/httpd/error_log (最新ログ)にも何も無いのですか?
 Re: CGIが動かない理由が解らない ( No.16 )
????????? 2013/12/17 12:18
????????? 管理者

なんとなくですが・・・・

サーバのロケールにあった文字コードで、Perlは保存していますよね??
デフォルトでは「UTF-8」です。
 Re: CGIが動かない理由が解らない ( No.17 )
????????? 2013/12/17 12:48
????????? Johann

アクセスログも見てみましょう。何かしら出ているはずですし、出ていないならそもそもリクエストが正常にCGIに届いていない可能性があります。
 Re: CGIが動かない理由が解らない ( No.18 )
????????? 2013/12/17 13:30
????????? stranger
?????§??? http://ja.528p.com/

DocumentRoot "/var/www/html"に設定されていて
/var/www/html/cgi-bin/にcgiファイルまたはディレクトリが配置され

http://www.hostname/cgi-bin/directory/test.cgi
としてアクセスするなら

ScriptAliasですべてのファイルをスクリプトとして実行する設定か

ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/"

<Directory "/var/www/html/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

または 一般ファイルが含まれるなら
Aliasを設定してoptionsでCGIの実行を許可する設定にします

Alias /cgi-bin/ "/var/www/html/cgi-bin/"

<Directory "/var/www/html/cgi-bin">
AllowOverride None
Options ExecCGI
AddHandler cgi-script .cgi .pl
Order allow,deny
Allow from all
</Directory>
 Re: CGIが動かない理由が解らない ( No.19 )
????????? 2013/12/17 14:12
????????? yoshida

> /var/log/httpd/error_log (最新ログ)にも何も無いのですか?

 test.cgiにアクセスしたログはありませんでした。
 Re: CGIが動かない理由が解らない ( No.20 )
????????? 2013/12/17 14:21
????????? アメリカン

>test.cgiにアクセスしたログはありませんでした。

Johannさんがおっしゃるようにaccess_log の方はいかがですか?
 Re: CGIが動かない理由が解らない ( No.21 )
????????? 2013/12/17 14:33
????????? yoshida

管理者さん
普段はFTPクライアント(NextFTP)で管理しており、すべてのCGIスクリプトは
同じように転送していますので、文字コードは大丈夫だと思います。

Johannさん
error_logに下記のように出ていたので

Tue Dec 17 13:59:32 2013] [error] [client 124.100.12.41] (2)No such file or directory: exec of '/var/www/html/cgi-bin/JGKxx2r3Wz/test.cgi' failed
[Tue Dec 17 13:59:32 2013] [error] [client 124.100.12.41] Premature end of script headers: test.cgi

そんなはずはないと確認してみました。
[root@hostname ~]# cd /var/www/html/cgi-bin/JGKxx2r3Wz
[root@hostname JGKxx2r3Wz]# ls
count.dat honey.log img jcode.pl menut.html test.html
honey.cgi icon.pl index.html menu.html test.cgi

strangerさん
両方の方法を試してみましたが、状況は変わりません。test.cgiと今回のことの
発端になったcgiだけが動きません。他のCGIは正常動作しています。
 Re: CGIが動かない理由が解らない ( No.22 )
????????? 2013/12/17 14:48
????????? アメリカン

エラーは出てましたね・・・

>Premature end of script headers: test.cgi

test.cgiのあるディレクトリに移動して
# od -tx1 -c test.cgi
を実行してください。ダンプ表示されますので、それを掲示板に貼り付けてください。

 Re: CGIが動かない理由が解らない ( No.23 )
????????? 2013/12/17 14:50
????????? 管理者

全角スペースが混在しているとか?
何かしらの文字コードが不正に思われますが・・・・
 Re: CGIが動かない理由が解らない ( No.24 )
????????? 2013/12/17 14:53
????????? yoshida


> test.cgiのあるディレクトリに移動して
> ダンプ表示されますので、それを掲示板に貼り付けてください。


以下のようになりました。

[root@hostnameb JGKxx2r3Wz]# od -tx1 -c test.cgi
0000000 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e
# ! / u s r / l o c a l / b i n
0000020 2f 70 65 72 6c 0d 0a 70 72 69 6e 74 20 22 43 6f
/ p e r l ?r ?n p r i n t " C o
0000040 6e 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74
n t e n t - t y p e : t e x t
0000060 2f 68 74 6d 6c 5c 6e 5c 6e 22 3b 0d 0a 70 72 69
/ h t m l ? n ? n " ; ?r ?n p r i
0000100 6e 74 20 22 3c 48 54 4d 4c 3e 5c 6e 3c 54 49 54
n t " < H T M L > ? n < T I T
0000120 4c 45 3e 43 47 49 20 53 63 72 69 70 74 20 54 45
L E > C G I S c r i p t T E
0000140 53 54 3c 2f 54 49 54 4c 45 3e 5c 6e 22 3b 0d 0a
S T < / T I T L E > ? n " ; ?r ?n
0000160 70 72 69 6e 74 20 22 3c 42 4f 44 59 3e 5c 6e 54
p r i n t " < B O D Y > ? n T
0000200 68 65 20 43 47 49 20 73 63 72 69 70 74 20 77 61
h e C G I s c r i p t w a
0000220 73 20 77 6f 72 6b 65 64 21 5c 6e 3c 2f 42 4f 44
s w o r k e d ! ? n < / B O D
0000240 59 3e 5c 6e 3c 2f 48 54 4d 4c 3e 5c 6e 22 3b 0d
Y > ? n < / H T M L > ? n " ; ?r
0000260 0a
?n
0000261
 Re: CGIが動かない理由が解らない ( No.25 )
????????? 2013/12/17 14:55
????????? 管理者

改行コードが<CR><LF>となっていますが、合っていますか?
 Re: CGIが動かない理由が解らない ( No.26 )
????????? 2013/12/17 15:09
????????? アメリカン

vi test.cgi
でファイルを開いてエスケープキーを押して(コマンドモードに)
:set fileformat=unix (Enterキー)

またエスケープキーを押して(コマンドモードに)
:wq (Enterキー)

これで改行が0aだけになると思います。
またダンプして確認してください。
 Re: CGIが動かない理由が解らない ( No.27 )
????????? 2013/12/17 18:10
????????? yoshida

[root@hostname JGKxx2r3Wz]# od -tx1 -c test.cgi
0000000 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e
# ! / u s r / l o c a l / b i n
0000020 2f 70 65 72 6c 0a 70 72 69 6e 74 20 22 43 6f 6e
/ p e r l ?n p r i n t " C o n
0000040 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f
t e n t - t y p e : t e x t /
0000060 68 74 6d 6c 5c 6e 5c 6e 22 3b 0a 70 72 69 6e 74
h t m l ? n ? n " ; ?n p r i n t
0000100 20 22 3c 48 54 4d 4c 3e 5c 6e 3c 54 49 54 4c 45
" < H T M L > ? n < T I T L E
0000120 3e 43 47 49 20 53 63 72 69 70 74 20 54 45 53 54
> C G I S c r i p t T E S T
0000140 3c 2f 54 49 54 4c 45 3e 5c 6e 22 3b 0a 70 72 69
< / T I T L E > ? n " ; ?n p r i
0000160 6e 74 20 22 3c 42 4f 44 59 3e 5c 6e 54 68 65 20
n t " < B O D Y > ? n T h e
0000200 43 47 49 20 73 63 72 69 70 74 20 77 61 73 20 77
C G I s c r i p t w a s w
0000220 6f 72 6b 65 64 21 5c 6e 3c 2f 42 4f 44 59 3e 5c
o r k e d ! ? n < / B O D Y > ?
0000240 6e 3c 2f 48 54 4d 4c 3e 5c 6e 22 3b 0a
n < / H T M L > ? n " ; ?n
0000255

これで動くようになりました。問題のCGIでも同じことを試してみます。
 Re: CGIが動かない理由が解らない ( No.28 )
????????? 2013/12/18 10:43
????????? アメリカン

ご存知だと思いますが、Windowsでテキストを普通に作ると改行はCRLFになります。

転送ソフトにもよると思いますが、普通、転送するときにテキストモードで転送すると
CRLFをLFのみに変換してくれます。バイナリーモードで転送するとCRLFのまま
転送されてしまいます。

もちろん、エディターでスクリプトを作るときに、改行をLFのみに設定してあれば
バイナリー転送できます。

追記ですが、Windows機の端末からviで開いてテキストを貼り付けたりすると改行変換されるか
されないか微妙です。
また配布されている掲示板等のスクリプトはサーバー機で展開することも考慮して最初からLFのみに
なっていますから、Windows機で展開してバイナリー転送しても問題ありません。
注意するのは自作のスクリプトや配布スクリプトを改変してセーブするときです。

文字コードも日本語を扱うときには要注意です。システムの文字コード、スクリプト自体の
文字コード、スクリプトが扱うデーターの文字コード、DBならDBが保存する文字コードなど
しっかり把握した上でないと適切なスクリプト等は作れません。
 Re: CGIが動かない理由が解らない ( No.29 )
????????? 2013/12/17 15:24
????????? yoshida

アメリカンさん
管理者さん
Johannさん

皆さんありがとうございました。どうして問題のCGIだけCRLFで送られていたのか
解りませんが、注意して進めたいと思います。

■ その他

ページ先頭へ


Copyright(©)2004-2018 First home server construction. All Right Reserved.