私が見る限り、Nginxはデフォルトで2つのログファイルをサポートしています:error_log
(Nginxサーバー自体に関連する問題を追跡)とaccess_log
(Nginxによって処理されたリクエストを追跡)。 access_log
ディレクティブを使用してlog_format
の形式を制御することは可能ですが、特定の要求のみを別のファイルに記録する方法を見つけることに失敗しました。将来の読者のためのリファレンスとしてSFに関する質問をしたいと思います。
access_log
で定義されたものとは異なるログファイルに特定のリクエストを記録する方法はありますか?
この質問の背後にある理由は、不要なクローラーへのアクセスを200で拒否するルールがあり(403はそれらがブロックされているというヒントを与えるため)、これらのリクエストをaccess_log
から除外するためですより困難。
cjc
私を正しい軌道に乗せてください。 if
ステートメントでaccess_log
を単独で使用することはできません(nginx: [emerg] "access_log" directive is not allowed here
エラーが発生します)。したがって、回避策は次のとおりです。
if ($http_user_agent ~* (crawler) ) {
set $crawler 'yes';
}
location ~ .* {
if ($crawler = 'yes') {
access_log /var/log/nginx/blockedbots.log;
return 200;
}
}
access_logは次の場合にサポートします:
(access_log path [format [buffer = size [flush = time]] [if = condition]];)
access_log /var/.... if $crawler;
ソース:
ドキュメントによると、if
ブロック内にaccess_log
ディレクティブを配置できるはずです。
http://wiki.nginx.org/HttpLogModule
したがって、次のようなことができるはずです。
if ($http_user_agent ~* (crawler) ) {
access_log /path/to/other/log/file ;
}