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

Nginx 如何基于日志消息内容实现条件日志过滤?

Nginx按特定字符串过滤日志实现方案

该需求可通过Nginx原生的map指令+条件日志功能实现,具体操作如下:

实现步骤

1. 定义匹配规则

在Nginx配置的http块中新增map配置,根据你要匹配的字段(请求URI、请求头、响应参数等)设置是否记录日志的标识:

http {
    # 示例:匹配请求URI中包含指定字符串的请求,$loggable为1时记录日志,为0时不记录
    map $request_uri $loggable {
        default 1;
        ~*/healthcheck 0; # 过滤所有URI包含/healthcheck的请求
        ~*/static/ 0; # 过滤所有URI包含/static/的静态资源请求
        # 可在此新增更多需要过滤的字符串规则
    }

    # 其他原有http块配置...
}

2. 关联日志配置

在需要生效的server或location块中修改access_log指令,新增条件判断参数:

server {
    listen 80;
    server_name your-domain.com;

    # 仅当$loggable值为1时才记录访问日志
    access_log /var/log/nginx/access.log main if=$loggable;
    error_log /var/log/nginx/error.log;

    # 其他原有server块配置...
}

拓展匹配场景

如果需要匹配其他字段的特定字符串,只需修改map指令的第一个源参数即可:

  • 匹配请求User-Agent字段:使用$http_user_agent作为源变量,可过滤指定爬虫请求
  • 匹配自定义请求头字段:使用$http_字段名全小写格式,例如X-App-ID对应变量为$http_x_app_id
  • 匹配响应状态码:使用$status作为源变量,可过滤指定状态码的请求日志

注意事项

  • map指令仅可定义在http配置块中,不可放置在server、location等下层块内
  • 正则匹配语法:~代表区分大小写匹配,~*代表不区分大小写匹配
  • 配置修改完成后需先执行nginx -t校验配置合法性,校验通过后执行nginx -s reload使配置生效

内容的提问来源于stack exchange,提问作者JD2k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:02