Help us understand the problem. What is going on with this article?

NginxでAWS ELBのHealth Checkログを出力させない方法

NginxでAWS ELBのHealth Checkをアクセスログとして出力させない方法を紹介します

環境

Nginx LB

方法

コンフィグ

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のアクセスログが出力されなくなります。

Reference

homines22
Network programmingやインフラ(サーバー・ネットワーク)などに興味があります。 最近はAWSを使ってサービス開発しています。 よく使う言語はC / Python / TypeScript / Rustです。
hands-lab
ハンズラボは小売業特化型ITソリューション企業です。数十万に及ぶ膨大な商品マスタを扱ってきた豊富なノウハウで、お客様の現場に最適なシステムを提案・開発します。 エンジニア募集中
https://www.hands-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away