忽略有关缺少一个主机名的ALLOWED_HOSTS条目的电子邮件

时间:2015-05-29 08:31:46

标签: django

我已经配置了我的应用程序,因此它接受Host:标头中使用我的FQDN的请求(使用ALLOWED_HOSTS)。但是,我们的后端团队使用不同的地址监控站点(只是HTTP“ping”以检查应用程序是否处于活动状态)。我不需要在第二个站点上提供任何页面,但是,收到关于此特定案例的缺少ALLOWED_HOSTS条目的电子邮件有点烦人(它每五分钟一次)。

我找到了几篇讨论如何一次性禁用此类通知的文章,但我想忽略这一点只针对这一个主机。有解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以通过向filter添加mail_admins并使特定django.security.DisallowedHost日志记录静音来解决此问题。 Docs.

当收到无效的主机时,会引发django.core.exceptions.SuspiciousOperation,由django.security.DisallowedHost记录器记录,并由mail_admins记录处理​​程序默认处理。

通过向django.utils.log.CallbackFilter处理程序添加mail_admins过滤器,您可以沉默所需的日志记录。在这种情况下,静默mail_admins处理程序将避免发送电子邮件。

示例LOGGING设置如下所示(我只会添加相关位,您的设置可能会有更多条目):

def skip_missing_host(record):
    if record.name == 'django.security.DisallowedHost':
        # `record.msg` contents are similar to:
        # u"Invalid HTTP_HOST header: 'somehost'.
        # You may need to add u'somehost' to ALLOWED_HOSTS."

        # Add condition to determine when the ERROR should be logged:
        if "u'somehost'" in record.msg:
            # Returning False indicates that the record shouldn't be handled:
            return False
    return True


LOGGING = {
    'filters': {
        'skip_missing_host': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': skip_missing_host,
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false', 'skip_missing_host'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
    },
}

或者,您可以创建自己的django.security.DisallowedHost处理程序,该处理程序需要在LOGGING设置中进行配置。