Nginx 默认设置下的网站访问日志中,绝大部分都是 css、js、图片等静态文件的访问日志,时间长了不仅会造成日志文件严重占用空间,而且遇到问题时分析日志也变得特别不方便。

禁用静态文件日志的好处

  • 提升 IO 性能,避免无意义的写入磁盘操作
  • 便于更清晰明了的查看 nginx 日志

禁用方法

修改全局 nginx.conf 文件

log_format compression '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" "$gzip_ratio"';

map $request_uri $loggable {
    default                                             1;
    ~*.(ico|css|js|gif|jpg|jpeg|png|svg|woff|ttf|eot)$ 0;
}

access_log /var/log/nginx/access.log compression if=$loggable;

这样即可过滤掉 css、js 及图片等静态资源文件的日志。

但是,这种写法有一个问题,无法过滤带时间戳的资源文件格式,例如:

index.css?t=20201121

解决方案是将 request_uri 修改成 uri 即可。所以,最终的版本是:

log_format compression '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" "$gzip_ratio"';

map $request_uri $loggable {
    default                                             1;
    ~*.(ico|css|js|gif|jpg|jpeg|png|svg|woff|ttf|eot)$ 0;
}

access_log /var/log/nginx/access.log compression if=$loggable;