You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:27:33