我有一个django项目运行在生产与gunicorn。它与哨兵相连。IO用于舒适的错误记录。
有很多spambots导致Invalid HTTP_HOST header
,因为他们试图通过ip访问它,这是不允许的django的ALLOWED_HOSTS
设置。那些垃圾邮件机器人填满了我的哨兵计划限制,过了一段时间,其他错误不再被记录。
什么是一个简单而优雅的解决方案?我已经考虑过一些,但它们都有警告:
- 在早期阶段过滤掉带有错误主机的请求,例如nginx -好主意,但我希望能够配置允许的主机在django设置
-
抓住错误
Invalid HTTP_HOST header
好主意,但这样我就不会在sentry 中有无效的http主机头错误处理。 - 我想记录每个主机和url每天一个错误或类似的东西-但然后我必须编码一个自定义限速器,它持续信息。似乎是一个复杂的解决方案
你对此有何看法?你还有别的主意吗?最优雅、最简单的解决方案是什么?
你可以配置Nginx来阻止任何带有Invalid HTTP_HOST头的请求
server {
listen 80;
server_name example.com;
if ($http_host !~* ^(example.com|www.example.com)$ ) {
return 444;
}
# rest of your Nginx configuration goes here
}
这样,你仍然可以在Django设置中配置允许的主机,同时过滤掉代理服务器上无效主机头的请求。