セキュリティ   ログ   キャッシュ   ネットワーク   圧縮   その他

Apache のログ

Zend Server で使用できる Web サーバーのログについての Tips を紹介します。
注)主に x86 Linux および Apache の組み合わせで動作確認した結果をもとにしています。すべての OS および Apache の Version での動作を保証するものではありません。
更新 目的方法
2016/11 定期的にローテートして肥大化を防ぎたい。 各 OS により、可能な手段が異なります。
1) x86 Linux の場合、logrotate により、各種のログをローテーションすることができます。
2) IBM i 版の IBM HTTP Server (Apache をもとに IBM i 用に作成された Web サーバー) については、 「ダウンロード・お客様向け FAQ」にログイン後、FAQ をご覧ください。
3) Windows の場合、下記のいくつかの手段が考えられます。
3-a. Apache に付属の bin ディレクトリーの中の rotatelogs.exe を使用する。
3-b. forfile コマンドを使用する。
3-c. PowerShell でバッチファイルを作成する。
2016/07 アクセスログの肥大化を防ぎたい。
ディスク負荷を減らしたい。
死活監視のための内部的なアクセスや、画像、CSS および JavaScript などのファイルへのアクセスをアクセスログに記録しないようにすることができます。 例えば下記のようにします。
変更前変更後
CustomLog /var/log/httpd/access_log combined SetEnvIf Remote_Addr 127.0.0.1 nolog
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png|css|js|ico)$" nolog
CustomLog /var/log/httpd/access_log combined env=!nolog
1行目ではサーバー自身の IP アドレスからのアクセスか判定し、2行目ではファイルの拡張子を文字の大小を区別せずに判定します。
SetEnvIfNoCase の行の 「gif」 の直前の 「?:」 は、正規表現の () 内の記述に一致した部分を記憶しておく必要がないことを明示しています。 メモリーの節約になります。なお、IBM i の Apache では「?:」という表現は使用できません。
アクセスログの場所、ファイル名および設定ファイルの場所は、OS や ディストリビューションにより異なります。
2015/02 エラーログの肥大化を防ぎたい。 下記のようなログが大量に記録されることがあります
「ファイル (中略)/favicon.ico が存在していません」
「要求 GET /favicon.ico HTTP/1.1 の URI が正しくありません」

これは、Internet Explorer (IE)などのブラウザが、 各 Web サイトを表すアイコンファイルがあるか Web サーバーに確認したことが原因です。 このファイルが存在すると、ブラウザのブックマークの一覧などで使用されます。
このエラーログの対処療法として、ドキュメントルートに favicon.ico ファイルを設置するという手段があります。

同様に、ブラウザが特定のファイルを Web サーバーに確認する例としては下記のようなものがあります。
説明
apple-touch-icon.png
apple-touch-icon-120x120.png
apple-touch-icon-precomposed.png
など
iPhone の Safari のブックマークのアイコンとして使用されます。
browserconfig.xml IE 11 のライブタイル機能で使用されます。
browserconfig_square.png など IE 11 のライブタイル機能で使用されます。
browserconfig.xml 内で png ファイルを相対指定した場合も出現することがあります。
robots.txt クローラー対象外のコンテンツなどを検索エンジンが知るために使用します。
sitemap.xml どのようなコンテンツが存在するか検索エンジンが知るために使用します。
robots.txt によって、このファイルがあることを検索エンジンに知らせることもできます。

2015/02 ディスク負荷をさらに減らしたい Apache の設定ファイルに BufferedLogs on を追記する方法があります。
ログファイルの出力をバッファーし、まとめてディスクに書き込むようになります。
ただし、実験的な項目のため、開発環境などで事前に動作検証してください。
2017/02 特定の拡張子のアクセスだけ IP アドレスの代わりにドメイン名を記録したい アクセスログに IP アドレスの代わりにドメイン名を記録するには、HostnameLookups on にします。
しかしながら、アクセスログの出力のたびに DNS サーバーに問い合わせて IP アドレスからドメイン名を解決しようとします。 そのため、すべてのアクセスに対して HostnameLookups on にすることはおすすめしません。 特定の拡張子のアクセスだけに限定してドメイン名を記録するには、下記のようにします。
php ファイルおよび phtml ファイルへのアクセスのみ記録する例です。
  <FilesMatch "\.(php|phtml)$">
    HostnameLookups on
  </FilesMatch>