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

Django项目因Spam Bots触发Invalid HTTP_HOST header耗尽Sentry配额,求优解

解决Django中Invalid HTTP_HOST header错误耗尽Sentry配额的优雅方案

针对你遇到的大量垃圾请求触发DisallowedHost错误耗尽Sentry配额的问题,推荐以下两种更优雅且实现简单的方案:

方案一:在Sentry后台直接配置过滤规则

这是最简单的零代码方案:

  • 登录Sentry后台,进入目标项目页面,打开Settings > Filters > Error Filters
  • 添加新规则:选择Error Type匹配django.core.exceptions.DisallowedHost
  • 根据需求设置处理逻辑:
    • 若完全无需接收这类错误,选择Discard直接丢弃
    • 若想保留少量样本用于监控,选择Sample并设置采样率(比如1%),既节省配额又能知晓这类请求的存在

方案二:在Django代码中通过Sentry钩子过滤

如果希望在代码层面灵活控制错误发送逻辑,可使用Sentry的before_send钩子:
在项目的settings.py或Sentry初始化文件中添加以下代码:

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
from django.core.exceptions import DisallowedHost

def before_send(event, hint):
    if 'exc_info' in hint:
        _, exc_value, _ = hint['exc_info']
        if isinstance(exc_value, DisallowedHost):
            # 可选:完全丢弃不发送,取消注释下方return语句
            # return None
            # 或:添加自定义标签后再发送,方便后续在Sentry中设置采样
            event['tags']['invalid_host'] = 'true'
    return event

sentry_sdk.init(
    dsn="你的Sentry DSN",
    integrations=[DjangoIntegration()],
    before_send=before_send,
    # 其他原有配置...
)

添加标签后,还能回到Sentry后台,针对invalid_host:true的事件设置采样率,实现精细化控制。

方案优势对比

这两个方案完美规避了你之前构思的弊端:

  • 无需修改Nginx配置,保留Django通过ALLOWED_HOSTS管理域名的能力
  • 既不会完全丢失错误日志(可选择采样),也不用编写复杂的持久化限流器
  • 实现成本极低,要么是后台点几下配置,要么是添加十几行代码

最推荐方案一,零代码修改就能快速解决问题;如果需要更灵活的逻辑控制,再选择方案二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:45