UNIXやLinux: 2013年10月アーカイブ

Apache 2.4 にしてからというもの、CGI のエラー(標準エラー出力)が error_log に吐かれなくなってしまった。
これは、CGI の開発などを生業にしている俺には非常に不便だ。

CGI が Internal Server Error となった時、エラーメッセージを確認するために、例えばコマンドラインからその CGI プログラムを実行してみる・・・なんてことをしないといけないのだが、当然、これでは本当のエラー原因を確認出来ないことがある。
やっぱ、CGI として実行されている状況でのエラーメッセージを確認したいのだ。

例えば、require するファイルが存在していない時など、

Can't locate /var/www/exsample/lib/common.pl in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /var/www/exsample/hogehoge.cgi line 25.

みたいに、common.pl が Can't locate とだよってことを教えてほしいわけだ。

2.2 以前の Apache では、上記のような Perl の標準エラー出力が error_log に出力されていたのだが、今は、

[Wed Oct 30 22:23:55.235093 2013] [cgid:error] [pid 15086] [client 202.XXX.XXX.XXX:61290] End of script output before headers: exsample.cgi

だけである。
これじゃあ、CGI がちゃんと走らなかったというのは分かるけど、エラー原因は全然わからんからなあ。

んで、結局、これ、CGI の実行に mod_cgid を使っていたことが原因だった。

LoadModule cgid_module modules/mod_cgid.so

を、

#LoadModule cgid_module modules/mod_cgid.so
LoadModule cgi_module modules/mod_cgi.so

という具合に、mod_cgi で実行すれば、error_log に STDERR が表示される。

こんな感じ↓

[Wed Oct 30 22:25:28.028808 2013] [cgi:error] [pid 15171] [client 202.XXX.XXX.XXX:62128] AH01215: Can't locate /var/www/exsample/lib/common.pl in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /var/www/exsample/hogehoge.cgi line 25.

これならデバッグに使えるぞ!

元々、2.2用の httpd.conf を手動で 2.4用に直した時、mod_cgid をロードしたら CGI が動いたので、そうか、mod_cgid でええんやなあ・・・とそのままにしてたけど、さっきマニュアル読んでみたら、mod_cgi には STDERR のログ出力についての記述があるのに、mod_cgid には無いからもしや・・・と思ったら。

まあ、--enable-cgi オプション付けて make したら、httpd.conf には
#LoadModule cgi_module modules/mod_cgi.so
がセットされるので、普通はこんなところで悩まないんだろうな(^^;

ちなみに、mod_cgi は httpd デーモン上で CGI を処理し、mod_cgid は外部の CGI 実行用デーモンで CGI を処理するモジュールであります。外部モジュールから直接 error_log には書き出せんから・・・ってことか?
わが社も 9割方の仕事がインターネット関係なので(Web に限らず色々と)、零細企業にも係わらず、インターネット上に何台かサーバを持っている。そのうちの一台に突然 ssh 接続できなくなってしまった・・・

host7.exsample.com から host4.exsample.com に、ユーザ chimpo で接続しようとしたんだけど、

[chimpo@host7 ~]$ ssh -l chimpo host4.exsample.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for host4.exsample.com has changed,
and the key for the according IP address 210.***.***.8
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
d0:65:85:**:**:**:**:**:ce:01:23:e0:**:**:**:12.
Please contact your system administrator.
Add correct host key in /home/chimpo/.ssh/known_hosts to get rid of this message.
Offending key in /home/chimpo/.ssh/known_hosts:5
RSA host key for host4.exsample.com has changed and you have requested strict checking.
Host key verification failed.

とか表示されて接続されない。

「え!?サーバ落ちてる?」とか一瞬不安になったが、/home/chimpo/.ssh/known_hosts に何か問題があるようなメッセージ。

メッセージの通りに、/home/chimpo/.ssh/known_hosts の 5行目を見てみたら・・・

host4.exsample.com,202.XXX.XXX.5 ssh-rsa AAAAXXXXX1yc2EAAAABIwXXXXXXvbeQ53tVXkGcRv7Oka23yXXXXXNrMBVojISjX9394ylzMlonWeowlJ3z8XXXXNz4rx3Ai3Frc2lzXXXXXXNSkkWi5ht3hwn317+vi+/mBt9DwYrdNB8YVMp1rlAm0z6VWIvHGt7tmQioKztFcUVCEA72Fw97PypBBTLfoKQuq6vXK93UWks+6PxgVF2Jk3C94yGTs/zmIN6HEXXXXX6mE2vxFyODHqjwfiOHlD1njMkKIF1f1Me1AFx3eIkPMwW1gXL9CH6ZpvAD/8yHRba9lnADK2SE/XXXGNO0I5vMDhFgBRU5BHmBXXXXD8SObA+9C30ONbcAID5YTUXXXXXXrQ==

あ~、ホスト情報が古いやんか。

実は、host4.exsample.com はそっくり中身を別のサーバに移したので、IP アドレスが 202.XXX.XXX.5 から 210.XXX.XXX.8 に変わっているのである。

ということで、この行を削除して保存。

再度、ssh 接続を試みたら・・・

[chimpo@host7 ~]$ vi .ssh/known_hosts
[chimpo@host7 ~]$ ssh -l chimpo host4.exsample.com
The authenticity of host 'host4.exsample.com (210.XXX.XXX.8)' can't be established.
RSA key fingerprint is d0:65:XX:XX:XX:XX:b5:ec:ce:01:XX:XX:XX:XX:XX:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'host4.exsample.com,210.XXX.XXX.8' (RSA) to the list of known hosts.
chimpo@host4.exsample.com's password:
Last login: Fri Oct 18 15:38:49 2013 from 202.XXX.XXX.46
[chimpo@host4 ~]$ exit
logout
Connection to host4.exsample.com closed.
[chimpo@host7 ~]$

うむ。無事接続完了。

いずれ、host7 も別のサーバに移そうかなっと思ってるんで、その時同じ原因で ssh つながらなくなってドキっとするかもしれないから一応メモっておこう(^^;

このアーカイブについて

このページには、2013年10月以降に書かれたブログ記事のうちUNIXやLinuxカテゴリに属しているものが含まれています。

前のアーカイブはUNIXやLinux: 2013年3月です。

次のアーカイブはUNIXやLinux: 2013年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら