在 nginx 里“过滤日志”通常有几种常见需求,不同场景做法不一样。下面按最常见用法给你系统说明。
favicon.ico、robots.txtlocation = /favicon.ico {
access_log off;
return 204;
}
location = /robots.txt {
access_log off;
return 200 "User-agent: *\nDisallow: /\n";
}
✅ 适合:静态资源、健康检查、爬虫文件
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
access_log off;
expires 30d;
}
map $status $loggable {
404 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable;
✅ 适合:减少无效日志
/health)location /health {
access_log off;
return 200 "ok";
}
map $remote_addr $loggable_ip {
"1.2.3.4" 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable_ip;
map $http_user_agent $loggable_ua {
~*bot 0;
~*spider 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable_ua;
map $request_method $loggable_method {
POST 1;
default 0;
}
access_log /var/log/nginx/access.log combined if=$loggable_method;
# 只看 500 错误
grep " 500 " /var/log/nginx/access.log
# 不看静态文件
grep -v "\.jpg\|\.css\|\.js" access.log
# 只看某个 IP
grep "1.2.3.4" access.log
http {
map $status $loggable {
404 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable;
}
❌ if 不能直接写在 location 里控制 access_log
✅ 要用 map + if=$var
nginx -v)我可以给你精确配置。