博客
关于我
nginx优化日志拒绝特定404请求写入
阅读量:791 次
发布时间:2023-02-15

本文共 1693 字,大约阅读时间需要 5 分钟。

404 请求日志查看问题及解决方案

需求描述

在生产环境中,日志中出现了大量的404请求写入,这对系统稳定性和安全性构成了潜在威胁。我们需要分析原因并采取有效措施解决问题。

日志分析

通过对日志进行分析,发现日志中的 "agent": "SLBHealthCheck" 值,表明此类404请求很可能是由阿里云的SLB(服务器负载均衡)健康检查功能触发的。具体来看,日志中的信息显示:

"timestamp":"2024-08-09T07:05:39.136+00:00","path":"/","status":404,"error":"Not Found","message":null,"requestId":"bdfxxxxxxxxxx942"

此外,日志中还包含来自远程客户端的详细信息,例如 remote_addrreferer。进一步确认阿里云控制台,发现确实存在一个持续进行的健康检查请求,且请求路径为 /

解决问题

为解决该问题,我们需要在不丢失有用信息的前提下,屏蔽掉由SLB健康检查触发的404请求。具体来说,考虑到服务是互联网-facing,直接屏蔽所有404请求可能会导致安全隐患(如攻击者利用404路径遍历攻击)。因此,我们采取以下措施:

  • 保留正常404日志:对于非SLB健康检查触发的404请求,仍然需要记录日志,以便于后续分析和监控。

  • 屏蔽SLB健康检查请求:通过Nginx配置,根据请求头中的 User-Agent 值判断是否为SLB健康检查请求,并在这种情况下关闭日志记录和返回404状态码。

  • 以下是具体的Nginx配置示例:

    server {    listen       80;    listen       7309;    server_name  xxxxxx.cn;    charset  utf-8;    # 日志配置    lua_need_request_body on;    set $resp_body "";    body_filter_by_lua 'local resp_body = string.sub(ngx.arg[1], 1, 1000) ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body if ngx.arg[2] then ngx.var.resp_body = ngx.ctx.buffered end';    location / {        proxy_pass http://prod;        # 屏蔽SLB健康检查和特定监控工具的404日志        if ($http_user_agent ~* "(SLBHealthCheck|Blackbox Exporter/0.21.1)") {            access_log off;            return 200;        }        access_log /data/logs/log;        error_log /data/logs/log error;    }}
    1. 配置后验证:在实施配置后,持续监控日志输出,确保SLB健康检查触发的404请求已被屏蔽,而其他正常请求的404日志仍然可以正常记录。
    2. 验证观察

      通过持续观察日志,可以看到以下结果:

      • SLB健康检查触发的404请求不再被记录到日志中。
      • 其他类型的404请求(如正常用户访问未存在的路径)仍然会被记录。

      验证命令示例:

      [root@iZbp129xxxxxxtfhe3Z logs]# tail -fn 300 logs2024-08-09 | grep 404

      日志中仅显示正常用户的404请求,而SLB健康检查相关日志已被成功屏蔽。

      总结

      通过上述方法,我们既保留了必要的日志信息,又有效屏蔽了潜在的安全风险。这种配置方式灵活且易于维护,同时兼顾了服务的安全性和日志的可用性。如果有其他需求或异常情况,请根据实际情况进行调整。

    转载地址:http://xhcfk.baihongyu.com/

    你可能感兴趣的文章
    Netty源码—6.ByteBuf原理一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理一
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    netty的HelloWorld演示
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty的网络框架差点让我一夜秃头,哭了
    查看>>
    Netty相关
    查看>>
    Netty简介
    查看>>
    Netty线程模型理解
    查看>>
    netty解决tcp粘包和拆包问题
    查看>>
    Netty速成:基础+入门+中级+高级+源码架构+行业应用
    查看>>
    Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
    查看>>
    netty(1):NIO 基础之三大组件和ByteBuffer
    查看>>
    Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
    查看>>
    Netty:原理架构解析
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>