我有一个生产化的Django后端服务器,运行在GCP上的Kubernetes(部署/服务/入口)上。我的django是这样配置的
ALLOWED_HOSTS = [BACKEND_URL,INGRESS_IP,THIS_POD_IP,HOST_IP]
一切正常
但是,我的后端服务器记录了像这样的间歇性错误(每天大约7个)
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-f23.appspot.com'. You may need to add 'xxnet-f23.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-301.appspot.com'. You may need to add 'xxnet-301.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'narutobm1234.appspot.com'. You may need to add 'narutobm1234.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'z-h-e-n-116.appspot.com'. You may need to add 'z-h-e-n-116.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'xxnet-131318.appspot.com'. You may need to add 'xxnet-131318.appspot.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'www.google.com'. You may need to add 'www.google.com' to ALLOWED_HOSTS.
DisallowedHost: Invalid HTTP_HOST header: 'stoked-dominion-123514.appspot.com'. You may need to add 'stoked-dominion-123514.appspot.com' to ALLOWED_HOSTS.
我的主要问题是:为什么-所有这些主机是什么?.
我当然不希望在不了解它们的目的的情况下允许这些主机。
附加问题:在我的技术栈中静音不需要的主机的最好方法是什么?我的主要问题是:为什么-所有这些主机是什么?
其中一些是为各种目的收集信息的网络爬虫。例如,www.google.com
地址很可能是填充谷歌搜索等搜索引擎数据库的网络爬虫。
谷歌很可能是通过从其他可搜索页面上的链接偶然到达你的后端站点的;例如,你的前端网站。你可以试着找出那条路径。我相信还有一个页面,你可以要求从搜索中删除url…虽然我不确定这对平息你的日志有多大效果。
其他可能是机器人探测您的站点的漏洞。
我当然不希望在不了解它们的目的的情况下允许这些主机。
嗯,你永远不可能完全知道他们的目的。在某些情况下,你可能永远也找不到。
附加问题:在我的技术栈中沉默不需要的主机的最佳方法是什么?
一种方法是使用手动管理的黑名单或白名单来阻止访问。
第二种方法是让后端发布一个"/robots.txt"文档;参见About/robots.txt。请注意,并非所有爬虫都会尊重"robots.txt"。Page,但是有声望的人会;查看Google如何解释robots.txt规范。注意,创建"/robots.txt"上面写着"任何人不得抓取此站点"。
其他方法包括将后端服务器放在防火墙后面或给它一个私有IP地址。(把你的后端服务公开给互联网似乎有点奇怪。)
最后,你看到的网站已经被屏蔽了,Django告诉你。也许您应该问的是如何静音这些事件的日志消息。
Django根据ALLOWED_HOSTS设置检查任何带有头信息的请求。如果不存在,Django会抛出Invalid HTTP_HOST报头错误。看到文档。
这些HTTP请求可能来自带有错误主机头值的bot。你可以考虑检查Cloud Armor来阻止来自特定主机头/域名的流量。