Posted at

NginxのアクセスログにELBの400エラーを出力しない

More than 5 years have passed since last update.


ELBのsecond health check

ELBを使ってるとNginxのアクセスログに次のようなログが大量に出てしまいます。

参考: http://blog.suz-lab.com/2012/11/nginxelb400-bad-request.html

x.x.x.x - - [12/Jun/2013:12:20:59 +0900] "-" 400 0 "-" "-" "-"

x.x.x.x - - [12/Jun/2013:12:21:00 +0900] "-" 400 0 "-" "-" "-"


ログを出力しない設定

参考: https://forums.aws.amazon.com/thread.jspa?messageID=303029


nginx.conf

# ELBからのアクセス(ドメイン名以外でのアクセス)

server {
listen 80;
root /path/root;
access_log off;
}

# ドメイン名でのアクセス
server {
listen 80;
server_name yourdomain.com;
root /path/root;

....
}


ドメイン名でのアクセス以外は上のほうの設定に振り分けられるので、そこでaccess_log off;を指定してログを出力しないにしています。

この場合はログを取らないように設定しますが、通常のログとは隔離してログを取ることも可能です。


注意

この設定ではELB以外でIPアドレス等でのアクセスはログが取れなくなってしまうので注意が必要です。ヘルスチェック用のファイル以外はアクセス禁止するとか、リダイレクトするとかしたほうが良いと思います。


Nginxのバージョン

書いてる時点でのEC2のyumでインストールしたバージョンは1.2.xなのでこの現象が出ます。

最新のバージョンではこれは出ないらしいです(未確認)

参考: http://misc.mat2uken.net/blog/2013/05/27/elb_and_nginx_400_badrequest.html