NginxでAWS ELBのHealth Checkをアクセスログとして出力させない方法を紹介します
環境
方法
コンフィグ
map $http_user_agent $loggable {
~ELB-HealthChecker 0;
default 1;
}
access_log /var/log/nginx/access.log main if=$loggable;
解説
mapとaccess_logに分けて少し解説していきます
map
map $first $second {...}
とすると、$first
を{...}
に沿って評価して返り値を$second
にマッピングします
今回の場合は$http_user_agent
、つまりHTTPヘッダーに含まれるUser AgentがELB-HealthChecker
に部分一致するか評価して一致するなら0、一致しなければ1を$loggable
にマッピングします
ELB-HealthCheckerの前についている~
は正規表現を使うための記号です
~
はcase-sensitiveで、~*
はcase-insensitiveです
[備考]
2020/10時点では正式なUser AgentはELB-HealthChecker/2.0
でした
/以降はバージョンなので今後変更の可能性があるので、ELB-HealthCheckerが含まれているかだけチェックしましょう
access_log
access_logにはif
というパラメータがあります
条件が0か空文字と評価されたらログ出力しなくなります
今回は$loggableのデフォルトが1で、ELB-HealthCheckerがUser Agentに含まれていたら0になるので、Health Checkのアクセスログが出力されなくなります。