Ubuntu 22 Server上Nginx access.log快速占满磁盘空间的问题咨询
Ubuntu 22 Server上Nginx access.log快速占满磁盘空间的问题咨询
兄弟,我太懂你这种日志疯狂涨满磁盘的崩溃感了!其实你的部署流程(Node.js+Nginx反向代理+UFW+SSL)没什么大问题——网站能正常跑就说明核心配置是对的,这些爆涨的日志全是公网环境里的恶意扫描、垃圾爬虫和代理探测请求,几乎所有暴露在公网的服务器都会遇到这种情况,咱们一步步解决:
先搞清楚问题根源
看你贴的日志片段,这些请求全是无关的:
- 有人在尝试用你的服务器当代理跳板(那些
CONNECT请求) - 垃圾爬虫在扫公网IP,乱请求第三方域名(比如
www.168mu.cn、baidu.com) - 这些都不是针对你网站的真实访问,纯粹是公网扫描器在瞎折腾
解决方案分三步走
1. 紧急止损:用日志轮转代替手动删日志
别再手动截断日志了,Ubuntu自带的logrotate能自动帮你压缩、轮转日志,避免无限膨胀:
- 编辑Nginx的日志轮转配置(一般默认就有,检查下):
确保配置类似这样:sudo nano /etc/logrotate.d/nginx
简单解释:每天自动轮转日志,保留最近14天的压缩日志,还会自动通知Nginx重新生成日志文件,不会影响服务。/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript } - 现在手动执行一次轮转立刻生效:
sudo logrotate -f /etc/logrotate.d/nginx
2. 过滤垃圾请求:不让它们写入日志
在你的Nginx站点配置文件(比如websitname.com.conf)里加规则,直接拦截这些垃圾请求,并且不记录到日志里:
server { # 先保留你原有的listen、ssl、proxy_pass等配置 # 新增下面的过滤规则: # 只允许你自己的域名作为请求Host,拦截其他乱填的Host if ($host != 'www.yourdomain.com' && $host != 'yourdomain.com') { return 444; # Nginx特有的返回码,直接关闭TCP连接,不写日志 } # 拦截CONNECT请求(代理探测) if ($request_method = CONNECT) { return 444; } # 拦截请求第三方网站的爬虫(比如日志里带http://的请求) if ($request_uri ~* http://) { return 444; } }
配置完重启Nginx生效:
sudo systemctl restart nginx
3. 强化防护:限制恶意IP的请求频率
- 临时拉黑日志里疯狂扫描的IP(比如
51.15.188.226):sudo ufw deny from 51.15.188.226 to any - 用Nginx的速率限制模块,防止单IP短时间内刷大量请求:
在Nginx的http块里添加:
这样能把疯狂扫你的IP给限流,既减少日志量也降低服务器负载。http { # 定义一个速率限制规则:每个IP每秒最多5个请求,用10M内存存IP信息 limit_req_zone $binary_remote_addr zone=scan_limit:10m rate=5r/s; server { # 在你的站点server块里应用这个规则 limit_req zone=scan_limit burst=10 nodelay; } }
最后总结
这些问题是公网服务器的常态,不是你的部署错误——只要把服务器暴露在公网,就会被各种扫描器盯上。按照上面的步骤操作,日志膨胀的问题应该能彻底解决,先做日志轮转止损,再过滤垃圾请求,最后加防护,一步步来就好。
备注:内容来源于stack exchange,提问作者Albert Einstein
相关产品推荐
相关产品推荐

