利用 Nginx 日志减少带宽消耗的可落地做法
一 减少日志写入量
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2|js|css)$ {
access_log off;
}
map $status $loggable {
~^[23] 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable;
log_format mini '$time_local $status $body_bytes_sent $request_uri $remote_addr';
access_log /var/log/nginx/access.log mini;
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;
以上做法直接减少日志条数与日志体积,从源头降低本地 I/O 与后续日志传输(如集中采集、归档)的带宽占用。
二 降低日志传输带宽(采集与归档链路)
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}
三 配套的性能优化(间接降低日志与带宽)
gzip on;
gzip_vary on;
gzip_comp_level 6;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss text/javascript;
location ~* \.(?:jpg|jpeg|gif|png|ico|js|css)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
listen 443 ssl http2;
这些配置虽不直接作用于日志,但通过减少请求次数与响应体积,间接降低了日志量与带宽占用。
四 快速检查与落地步骤
sudo nginx -t && sudo nginx -s reload
# 或
sudo systemctl reload nginx