Nginx代理日志出现大量/:80重复路径,如何拦截或清理?
解决Nginx中重复/:80路径请求的日志泛滥问题
一、从源头拦截无效请求(最优方案)
直接拦截此类请求,既能避免日志被无效内容填满,也能减少服务器资源浪费。可以通过Nginx配置实现两种拦截逻辑:
1. 按请求路径匹配拦截
在Nginx的server块中添加规则,匹配包含重复:80的路径:
# 匹配包含至少两个/:80的请求,直接关闭连接(444比403更节省资源) if ($request_uri ~* "/:80(/:80)+") { return 444; }
如果业务中不会用到带:80的路径,也可以直接拦截所有包含:80的请求:
if ($request_uri ~* "/:80") { return 444; }
2. 结合来源域名精准拦截
针对yahoo.com和internet-measurement.com的来源请求,配合路径规则拦截:
http { # 用map模块避免嵌套if(Nginx不推荐嵌套if逻辑) map $http_referer $is_bad_referer { default 0; ~*(yahoo\.com|internet-measurement\.com) 1; } map $request_uri $is_bad_path { default 0; ~*/:80(/:80)+ 1; } server { # ...其他原有配置 if ($is_bad_referer = 1 and $is_bad_path = 1) { return 444; } } }
二、清理已生成的无效日志(事后补救)
如果已经积累了大量无效日志,可以用命令行工具批量处理:
1. 实时过滤日志写入
修改Nginx日志配置,过滤掉无效请求后再写入日志(会增加少量服务器负载,优先推荐拦截方案):
access_log "| grep -v '/:80/:80' /var/log/nginx/access.log";
2. 清理现有日志文件
使用sed删除包含重复:80的日志行:
sed -i '/\/:80\/:80/d' /var/log/nginx/access.log
如果需要保留最后一行正常的/请求,可使用更精准的匹配:
sed -i '/\/:80\/:80.*\//d' /var/log/nginx/access.log
三、额外注意事项
- 上线前测试:先在测试环境验证拦截规则,避免误拦截正常业务请求。
- 持续监控:通过Nginx状态模块或日志分析工具,跟踪此类请求的变化情况。
内容的提问来源于stack exchange,提问作者user217354
相关产品推荐
相关产品推荐

