我有一个漂亮可爱的Django网站启动并运行,但是注意到我的error.log
文件变得越来越大,经过几个月的生存后超过150 MB。结果发现一大堆垃圾邮件正在寻找众所周知的URL漏洞(或其他东西),并且会遇到一堆子目录,如http://mysite.com/ie
或http://mysite.com/~admin.php
等。
由于Django使用URL重写,它正在寻找适合这些请求的模板,这会引发TemplateDoesNotExist
异常,然后是500消息(Django会这样做,而不是我)。我关闭了调试,所以他们只获得了通用的500消息,但它很快就填满了我的日志。
有没有办法解决此问题?或者只是阻止IP这样做?
答案 0 :(得分:6)
答案 1 :(得分:3)
“有没有办法解决此问题?” - 500绝对是强制性的。日志条目也是必需的。
“或者只是阻止IP这样做?” - 我们不希望。
每个人都有这个问题。几乎每个人都使用Apache log rotation。其他人都使用操作系统轮换或自己滚动。
答案 2 :(得分:3)
如果您可以在UserAgent字符串中找到模式,则可以使用DISALLOWED_USER_AGENT
设置。我的是:
DISALLOWED_USER_AGENTS = (
re.compile(r'Java'),
re.compile(r'gigamega'),
re.compile(r'litefinder'),
)
请参阅Django docs中的说明。
答案 3 :(得分:2)
如果URL与URLConf中的任何条目都不匹配,Django应该抛出404而不是500。
http://docs.djangoproject.com/en/dev/topics/http/urls/#handler404
您需要提供404模板:
如果您没有定义自己的404视图 - 并且只使用建议的默认视图 - 您仍有一项义务:在模板目录的根目录中创建404.html模板。默认的404视图将使用该模板来处理所有404错误。
答案 4 :(得分:0)
编程解决方案是:
答案 5 :(得分:0)
如何将全能模式设置为您的网址文件中的最后一项,并将其指向通用的“无此网页”甚至是您的主页?换句话说,将500改为对您主页的请求。
答案 6 :(得分:0)
为什么不修复那些“错误”?如果url模式不匹配,则应显示正确的错误消息。通过添加这些模板,您将help the user和您自己: - )
答案 7 :(得分:0)
是的,它应该是404而不是500. 500表示正在尝试处理URL并且在此过程中失败。你需要找到并修复它。
我们遇到了类似的问题。由于我们运行的是Apache / mod_python,因此我选择使用mod_rewrite规则在.htaccess中处理它。我会定期查看日志并在“go to hell”列表中添加一些模式。这些全部重写以提供1x1像素的gif文件。没有404s的海啸让我的日志分析变得混乱,它给Django和Apache带来了最小的负担。
你不能让这些**孔消失,所以你所能做的就是尽量减少它们对你系统的影响并继续你的生活。