nginx で特定IPからのアクセスをログに取らない

LoadBalancer からのアクセスをログに取らない、みたいな。

この例では一部のLBからにstatus 400 のエラーを返してしまうときに、error_page /400 に飛ばして、そのlocation内でgeo module を使ってIPがマッチした場合にaccess_log off にしている。なので、status に関係なく特定のIPからのログを取らない場合はこれだけで良い。

http {
  # snip
  geo $lb  {
    default         0;
    192.168.0.0/24  1;
    10.0.0.0/24     1;
  }
	    
  location = / {
    if ($lb) {
      access_log  off;
    }
  }
}

ちなみにapacheの場合はSetEnvIf Remote_Addr を使えば良い。

SetEnvIf   Remote_Addr "^192\.168\.0"  lb
CustomLog  /path/to/log combined env=!lb