我已经ALLOWED_HOSTS
正确设置了我的设置,但是我不断收到来自所有类型的站点的请求,这些请求导致这个“[Django] ERROR (EXTERNAL IP): Internal Server Error”被发送出去。
如何忽略此特定错误?
我已经ALLOWED_HOSTS
正确设置了我的设置,但是我不断收到来自所有类型的站点的请求,这些请求导致这个“[Django] ERROR (EXTERNAL IP): Internal Server Error”被发送出去。
如何忽略此特定错误?
当http 标头与所需设置不匹配时SuspiciousOperation
,Django 会引发异常。这个异常没有被特殊处理,因此错误会通过日志系统传播。CommonMiddleware
Host:
ALLOWED_HOSTS
您可以使用 lborgav 的答案以不同方式转移所有错误消息,但如果您只想捕获这个错误,您可以设计一个自定义中间件。
以下代码段是一个中间件类,您可以将其添加到其中MIDDLEWARE_CLASSES
以settings.py
消除此错误。
MIDDLEWARE_CLASSES = [
'myapp.middleware.SquashInvalidHostMiddleware',
....
]
这必须发生在 之前django.middleware.common.CommonMiddleware
,因为您想检测错误条件的存在并立即返回响应,然后再进行CommonMiddleware
会产生异常的情况。
# myapp/middleware/__init__.py
from django.core.exceptions import SuspiciousOperation
from django.views.defaults import server_error
class SquashInvalidHostMiddleware(object):
"""
Middleware class to squash errors due to suspicious Host: headers.
"""
def process_request(self, request):
"""
Check for denied Hosts.
"""
try:
# Attempt to obtain Host: from http header. This may elicit a
# SuspiciousOperation if Host: doesn't match ALLOWED_HOSTS.
# Unceremoniously squash these errors to prevent log emails,
# diverting straight to 500 page.
request.get_host()
except SuspiciousOperation:
return server_error(request)
在您的 LOGGING 配置中,您可以覆盖处理程序类
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.MyAdminEmailHandler',
'include_html': True,
}
},
现在您可以编写您的类 MyAdminEmailHandler。在AdminEmailHandler中检查其代码
在发出函数中,如果 (request.META.get('REMOTE_ADDR') 不在 settings.INTERNAL_IPS) 中,就去掉报告