nginx优化日志拒绝特定404请求写入

需求描述

生产环境日志查看到大量的404请求写入。

日志分析

通过日志分析得到结论是  查看日志内存 "agent": "SLBHealthCheck",疑似是alb的健康检查

"0.012","request_GlobalId": "","response_GlobalId": """response_body": "{\"timestamp\":\"2024-08-09T07:05:39.136+00:00\",\"path\":\"/\",\"status\":404,\"error\":\"Not Found\",\"message\":null,\"requestId\":\"bdfxxxxxxxxxx942\"}","request_body": "" }
{"timestamp":"2024-08-09T15:05:39+08:00","remote_addr": "100.110.110.110", "referer": "", "request": "GET / HTTP/1.1", "status": 404, "bytes": 136, "agent": "SLBHealthCheck", "x_forwarded": "", "up_addr": "10.110.110.110:110","up_host": "","up_resp_time": "0.011","request_time": 

进一步打开阿里云控制台确认信息。

查看alb健康检查是否配置,确认是alb的健康检查接口一直在探测。这里可以看到是一个get请求,和上面的日志对应上了。

解决问题

这里一开始想把所有404请求都不写入到日志中,404全部屏蔽掉,但是考虑到服务是互联网的,是否有攻击者,如果有人恶意遍历http的路径,这边无法收到日志,就会造成一定的损失。

所以既要保留正常的404请求,又要把alb的404请求都屏蔽掉。这里还是分析日志,这里想根据IP地址进行屏蔽,觉得alb这个是vip,如果alb变动的这个配置会无用,还是根据"agent": "SLBHealthCheck" 来屏蔽alb的404请求,这样其它项目上也可以使用这个配置文件。把判断逻辑写到了server里,检查ng的配置文件并且重启。

    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;

        # 屏蔽 SLBHealthCheck的健康检查 和 Blackbox Exporter/0.21.1的监控的 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;
}
}

验证观察

持续观察正常日志都可以进来,alb的404日志已不会再写入到日志文件中了,其它请求的404依然会写进日志来。

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

验证完成,配置正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值