2013年2月20日 星期三

nginx 的 access.log 出現大量的 400

網路上的討論和回答都很混亂,在這裡整理筆記一下。

nginx 它的 access log 紀錄的比較詳盡,所有不是錯誤訊息的狀態,也會被記到 access log 裡面。

要重新產生這個錯誤很簡單。當你的 nginx 架設好了之後,打開瀏覽器造訪網站,再把瀏覽器關掉,就可以在 nginx 的 access.log 看到。



# tail -f /var/log/nginx/access.log

fashion.piliapp.com 1.162.83.60 - - [20/Feb/2013:07:17:25 +0000] GET / HTTP/1.1 502 732 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17 AlexaToolbar/alxg-3.1 - 0.000 943
 1.162.83.60 - - [20/Feb/2013:07:17:35 +0000] - 400 0 - - - 0.000 0
 1.162.83.60 - - [20/Feb/2013:07:17:35 +0000] - 400 0 - - - 0.000 0
 1.162.83.60 - - [20/Feb/2013:07:17:35 +0000] - 400 0 - - - 0.000 0
 1.162.83.60 - - [20/Feb/2013:07:17:35 +0000] - 400 0 - - - 0.000 0
 1.162.83.60 - - [20/Feb/2013:07:17:35 +0000] - 400 0 - - - 0.000 0

所以開一次瀏覽器,產生了 5 個連線,然後關掉瀏覽器,或是等個10~20秒後,連線就會關閉,就會產生很多 400 的 log。


要關閉就到 nginx 的預設的設定檔

vim /etc/nginx/nginx.conf


-       access_log /var/log/nginx/access.log;
+      access_log off;
        error_log /var/log/nginx/error.log;

把預設的 log 關閉就可以了,當然 一般的 log 還是要記到其它地方

我通常是在 nginx.conf 設定 log format
http {
       ............
        log_format  access_format_name '$host $remote_addr - $remote_user [$time_local] $request '
             '$status $bytes_sent $http_referer '
             '$http_user_agent $http_x_forwarded_for $request_time $request_length';
       ............
}

然後在 sites-enabled/piliapp.com.conf 裡面設

server {
       ............
                access_log  /var/log/nginx/access.log access_format_name;
       ............
}

就可以了。