Apacheのエラーログで日本語を表示させる方法とは?

このQ&Aのポイント
  • 社内で構築しているWEBサーバー(Apache)のエラーログに、日本語の箇所が16進数で表示されてしまう問題に困っています。
  • Apacheのサイトで調べた結果、セキュリティ上の理由により2.0.46以降では印字不可能な文字と他の特別な文字はエスケープされるようになっています。
  • しかし、なぜ日本語が「認識不能」となってしまうのか解決できていません。WEB画面の表示には問題はないため、この問題を解決する方法を知りたいです。
回答を見る
  • ベストアンサー

Apacheのエラーログで、日本語を表示させたい

大変、困っていますので宜しくお願いします。 社内で構築している、WEBサーバー(Apache)のエラーログに、 日本語の箇所が、16進数で表示されてしまいます。 Apacheのサイトで、以下のような文章を見つけましたが、 「認識不能」という箇所において、何故日本語が認識不能になってしまうのかがわからずに、解決に至っておりません。 尚、WEB画面の表示については、問題ありません。あくまで、エラーログのみ日本語の認識ができていないようです。 情報元URL:http://httpd.apache.org/docs/2.0/ja/mod/mod_log_config.html <引用 はじめ> セキュリティ上の理由により 2.0.46 より印字不可能な文字と 他の特別な文字は、ほとんど \xhh という 文字列でエスケープされるようになりました。<引用 終わり> *環境* OS:CentOS 4.4 WEB:Apache 2(httpd-2.0.52-28.ent.centos4) Perl:perl-5.8.5-36.RHE LANG="en_US.UTF-8"(これは、日本語にしても同じ結果でした・・)

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

  • ベストアンサー
回答No.1

Apache2.2も確認しましたが同じくセキュリティ上の理由と有るので、 logの出力formatをいじるのは諦めて error_logを別fileにコンバートするスクリプトをおいたらどうでしょう? #! /usr/bin/perl $read_file='error_log'; $out_file = 'jp-'. $read_file .'.txt'; open (R,$read_file); open (J,">$out_file"); while(<R>) {s/\\x([a-f\d]{2})/pack("C", hex($1))/ieg; print J; } close (R); close (J); print 'Success!! ' . localtime() ."\n\n"; __END__ こんなのを log_conv.pl などのfile名で置いて、コマンドラインから実行させれば出来ますけどね そんな方法はイラン!ってことならご免です。

belleseba
質問者

補足

ご回答の程、ありがとうございました。 こういった回避方法があるとの事で、大変参考になりました。 しかし、できましたらモジュールの追加や設定でエスケープ文字を回避したいと考えております。 今回の質問内容について、補足になりますが、このエラーログが表示されてしまうのは、 特定のCGIファイルでおきています。 これは、Perlのモジュールの追加で回避できる類のものでしょうか? また、Apacheは、どの部分で、「印字不可能な文字」と判断しているのでしょうか? (1.3系では問題なく表示されておりました) 質問が重なってしまい申し訳ありませんが、ご回答頂ける方は、ご教授の程、宜しくお願い致します。 インストールされている、Perlモジュール一覧 ------------------------------------------ perl-CGI-Lite perl-NKF perl-Time-HiRes perl-Filter perl-Text-Template perl-Crypt-DES perl-DBI perl-DBD-Oracle ------------------------------------------

その他の回答 (1)

回答No.2

となるとパイプ処理ですかね http://httpd.apache.org/docs/2.0/ja/mod/core.html#errorlog によると ErrorLog "|/usr/local/bin/httpd_errors" と言う様に処理するプログラムを指定すれば出来るとありますが 私がやってみた限りではうまくいきませんでした。 httpd.confに ErrorLog "|/home/hoge/er_jp" と記述してスクリプトを指定し /home/hoge/er_jpではSTDINを読んで 1.そのままの内容を書き込み(デフォルトログ) 2.デコードして別fileに書き込み(日本語化ログ) しましたが、Apacheの起動時のメッセージは記録されますが .htaccessにわざと日本語を記述して500errorにしてもログに記録されませんでした 一応内容を貼っておきます #! /usr/bin/perl $en_file='/home/hoge/test_error_log.txt'; $jp_file = '/home/hoge/jp--er_log.txt'; open (E,">>$en_file"); open (J,">>$jp_file"); foreach(<STDIN>) { print E ; s/\\x([a-f\d]{2})/pack("C", hex($1))/ieg; print J ; } close (E); close (J); __END__ うちのはFedora5+Apache2.2.0ですので、その環境のためかもしれません。 >また、Apacheは、どの部分で、「印字不可能な文字」と判断しているのでしょうか? セキュリティの意図としては制御文字を埋められることを避けるためでしょうが 実際には単純に半角英数字や記号の他はすべてエスケープしているのでは? >これは、Perlのモジュールの追加で回避できる類のものでしょうか? 内容がわからないので何とも、、、 デバッグの手順としては(PerlのCGIの場合、file名をhoge.cgiとすると) コマンドラインから 1. $ perl -wc hoge.cgi  <=と打って Syntax OK が出ればOK 2. $ ./hoge.cgi   <= 最初に意図したヘッダが出力されるかTEST ブラウザで 3. hoge.cgi にアクセスしてみる 4. eror_log を見る 5. Suexecなら logs/suexec.log も見てみる ( http://oshiete1.goo.ne.jp/qa2469513.html )

belleseba
質問者

お礼

ご回答の程、ありがとうございました。 Apacheの挙動については、不明のままですが、 ログファイルに、Perlで処理させて、日本語表示が可能になりましたので、この方向で処理をしたいと考えています。 大変、助かりました。ありがとうございます。

関連するQ&A

  • apache2.2.6 日本語設定

    Windowsでサーバを構築しているのですが。 Perlのチャットプログラムの参加者名は文字化けして困っております。 apache 2.2.6の日本語設定の項目が未修正の為でしょうか? 過去のVerにはAddDefaultCharsetという項目があったようですが。 2.2.6では見当たりませんでした。 似たような項目はあるのでしょうか? 質問攻めで申し訳ございません。

  • CentOS7.2 Apacheエラーログについて

    CentOS7.1を使用していましたが2日ほど前にCentOS7.2にアップデートしました。 アップデート後からApacheのエラーログが頻繁に出力されるようになりました。 CentOS7.2にアップデート後のエラーログの内容ですが、 [Fri Dec 25 13:15:11.570131 2015] [mpm_prefork:notice] [pid 1141] AH00170: caught SIGWINCH, shutting down gracefully [Fri Dec 25 14:05:21.758346 2015] [suexec:notice] [pid 5588] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Fri Dec 25 14:05:21.900927 2015] [:warn] [pid 5588] NSSSessionCacheTimeout is deprecated. Ignoring. [Fri Dec 25 14:05:24.576333 2015] [:error] [pid 5588] Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. [Fri Dec 25 14:05:24.863090 2015] [auth_digest:notice] [pid 5588] AH01757: generating secret for digest authentication ... [Fri Dec 25 14:05:24.863542 2015] [lbmethod_heartbeat:notice] [pid 5588] AH02282: No slotmem from mod_heartmonitor [Fri Dec 25 14:05:24.865464 2015] [:warn] [pid 5588] NSSSessionCacheTimeout is deprecated. Ignoring. [Fri Dec 25 14:05:29.052357 2015] [mpm_prefork:notice] [pid 5588] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_auth_gssapi/1.3.1 mod_auth_kerb/5.4 mod_fcgid/2.3.9 mod_nss/2.4.6 NSS/3.19.1 Basic ECC PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations [Fri Dec 25 14:05:29.052393 2015] [core:notice] [pid 5588] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND' [Fri Dec 25 14:05:29.375102 2015] [:error] [pid 5949] Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. [Fri Dec 25 14:05:29.383065 2015] [:error] [pid 5947] Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. [Fri Dec 25 14:05:29.420995 2015] [:error] [pid 5946] Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. [Fri Dec 25 14:05:29.425088 2015] [:error] [pid 5950] Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. となっています。 最後の、 Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected localhost as virtual name. のログがHTTPにアクセスが入るたびに出ているようです。 Apacheのhttpd.confの設定はバーチャルドメインで複数サイト運営していますが アクセス自体は問題なくできています。 (サーバー証明書は入れていません) 1日調べてみましたが、原因がわからず質問させていただきました。

  • apacheとCGIの設定について

    はじめまして。 solaris9のサーバーにapache2系とruby1.8.1をインストールして、 apache1.3系、ruby1.6.8で動いていたCGIを移行しています。 そこで二つほど問題が出て困っています。 1.apacheのエラーログに書き込まれる日本語が文字コードになってしまう。 CGI等でエラーがでるとapacheのエラーログにちゃんと書き込まれるのですが、 そこに日本語があると全て文字コードで書き込まれてしまいます。 例えば、「あいうえお」だと「\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa」となってしまいます。 2.HTMLからのフォームデータが受け取れない。 ruby1.8系でCGIライブラリが変更されたことにより、HTMLからのフォームデータが正常に受け取れなくなってしまいました。 CGIスクリプト自体を書き換えて受け取れるようにすることは可能のようですが、 できればサーバー側の設定で対処したいと思います。 上記二点について解決策をお知りの方、是非ともご教授願います。

    • ベストアンサー
    • CGI
  • Apacheで SSLを設定する場合のApacheの最新のバージョン?

    ApacheでSSLをしたいのですが、現在Apache2.0.40を使っています。 opensslは 0.9.7で、ついでにアパッチを2.0.48にしたいと考えていますが、mod_sslは対応しているのでしょうか? 日本語で詳しく書かれているmod_sslのサイトをご存知の方教えていただけませんか?

  • Apache 文字化け

    以下の環境で、WebブラウザをJSPで作成し、入力した日本語をServletから出力させるプログラムを作成しています。 【環境】 OS:Windows XP Webサーバ:Apache 2.2.4 サーブレット、JSPコンテナ:Tomcat 5.5.23 コネクタ:mod_proxy_ajp 【事象】 Webブラウザより、日本語を入力⇒クエリ送信⇒結果画面をした結果、Webブラウザから入力した値のみが文字化けします。 JSP側でもharset=Shift_JISを指定していますし、Apacheのhttpd.confでもAddDefaultCharset offを設定しています。なんでしょうか。。。わかりません。アドバイス宜しくお願い致します。

  • Apacheの日本語名ファイルリンク

    質問させていただきます。本来であれば他のところで質問すべきなのでしょうが、リファレンスが英語だったり、似たような症状はあってもピンポイントでは無かったりしたのでお願いします。 Apache2.0.54をインストールし実行しました。index.htmlも書き換え、いざ公開と行こうと思った矢先、日本語リンクがあると、どうも文字化けしてしまうようで、何回やってもForbiddenになってしまいます。 今のところPerlなどはいれず、純粋のHTTPDとして動作していますが、どのようにすればよいでしょうか?英語ファイル名リンクであれば通るのですが、よろしくお願いいたします。m(_ _)m

  • Apache上での大文字小文字の識別回避

    いつもお世話になっております。 現在、Windows環境で使用されていたWebコンテンツ(HTMLと画像)をCentOS上のApacheに移す作業を予定しています。 HTMLファイルのソースに記述されている参照ファイル名(例:abc.JPG)と実際のファイル名(例:abc.jpg)の大文字小文字が一致しておらず、Apache上では正常にWebページが表示されません。(画像が表示されるべき箇所にバッテンマークが表示される状態です。) ※URL上の大文字小文字は特に問題が起きていません。 Windowsでは大文字小文字の識別がなく、こうしたHTMLファイルの書き方になっているかと思いますが、Apache上で大文字小文字を識別せずWebページを表示することは可能でしょうか? mod_spellingは近しい機能のようにも思えましたが、URLの補正とあるので本件の場合どうなるのかな、と。。。 なにぶん、不慣れな分手間取っておりまして、皆様のお知恵を拝借させていただければ幸いです。

  • apacheにssl

    OS:RedHat8.0 apache 1.3.27 tomcat 4.1.24 tomcat connector jk2-2.02 java2-sdk 1.4.103 postgresql 7.3.3 上記が現在のインストール状況なのですが、 mod_sslかapache_sslをいれたいとおもっています。(どちらがいいでしょうか?) mod_sslをいれた場合tomcatの動きはどうなるのでしょうか? SSL→apache→tomcat という感じでしょうか? mod_sslとapacheのインストール方法や説明などについて 日本語サイトでお勧めのところがありましたらお願いします。 なぜかわからないのですが、8080のポートを塞ぐと 最初にアクセスしたときjspがなぜかうまく動作しません。 一度アクセスしたあとだと8080を塞いでも問題ないのですが。。

  • ApacheのIndex表示で日本語ファイル名を表示

    ApacheのIndex表示を利用して、簡易のDOWNLOAD用として利用しているのですが、Index表示の際日本語ファイルを表示させることができません。 状況としては、SambaでSerever(UTF-8)に移動したファイルを、ApacheからDownLoadするという状況です。 文字コードあたりにヒントがあるようなのですが、自分では分かりません。 分かるいる方いらっしゃいましたら、御教授の方よろしく御願い致します。

  • XAMPP1.7.3でApacheが起動しない

    よろしくお願いします。 ローカルPCのOSはWin7の32bitで、xampp-win32-1.7.3をインストールしました。 Apacheが起動しなくて困ってます。 エラー表示は、Busy・・・ Apache started。 保存先は、c:\pg\xamppでxampp\xamppのようにはしてません。 xampp-portcheckでは、Statusは全てfreeになってます。 \apache\conf\httpd.confの、 # Perl settings Include "conf/extra/httpd-perl.conf" の部分は、 # Perl settings # Include "conf/extra/httpd-perl.conf" とコメントアウトにしました。 コマンドプロンプトのnetstat -aonで80番ポートを調べましたが、 0.0.0.0:80はありませんでした。 Apacheのerror.logは以下です。 (↓エラーログ) [Fri Apr 01 23:30:50 2011] [notice] Digest: generating secret for digest authentication ... [Fri Apr 01 23:30:50 2011] [notice] Digest: done [Fri Apr 01 23:30:51 2011] [notice] Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations [Fri Apr 01 23:30:51 2011] [notice] Server built: Nov 11 2009 14:29:03 [Fri Apr 01 23:30:51 2011] [crit] (22)Invalid argument: Parent: Failed to create the child process. [Fri Apr 01 23:30:51 2011] [crit] (OS 6)ハンドルが無効です。 : master_main: create child process failed. Exiting. [Fri Apr 01 23:30:51 2011] [notice] Parent: Forcing termination of child process 36 ちなみに、MySQLも起動しません。 エラー表示は、同様にBusy・・・ MySQL started。 どうかよろしくお願いします。

    • ベストアンサー
    • MySQL