使用CloudFlare for SaaS时,如何在源站判断请求的自定义主机名?
CloudFlare for SaaS 源站识别请求主机名方案
场景说明
假设你的回退URL是通配符地址customers.example.com,存在两类客户请求:
- 客户1未使用自定义主机名,请求地址为
customer1.customers.example.com - 客户2使用自定义主机名,请求地址为
foo.bar.com
两类请求最终都会指向customers.example.com,源站需要识别真实请求对应的主机名。
源站收到的关键请求头
CloudFlare会自动传递两个核心请求头,用于识别真实请求:
Host头:- 客户1的请求,源站收到的
Host值为customer1.customers.example.com - 客户2的请求,源站收到的
Host值为foo.bar.com
CloudFlare会自动过滤客户端注入的伪造Host头,源站拿到的是经过验证的真实请求主机名,无需担心注入风险。
- 客户1的请求,源站收到的
Cf-Visitor头:JSON格式的请求头,包含host字段,值与Host头一致,可作为额外验证依据,示例:{"scheme":"https","host":"foo.bar.com"}
客户识别方法
直接读取Host头(或Cf-Visitor中的host字段)即可:
- 若
Host值为customer1.customers.example.com,对应客户1 - 若
Host值为foo.bar.com,对应客户2
在源站代码中读取该字段,匹配预先存储的客户主机名映射关系即可完成识别。
是否需要CloudFlare Workers?
不需要。默认情况下CloudFlare已通过Host和Cf-Visitor头传递真实请求主机名,完全满足识别需求,无需额外部署Workers。
Host头的安全性说明
CloudFlare会严格校验自定义主机名的归属(客户需完成DNS验证才能启用),同时拦截客户端发送的伪造Host头,源站收到的Host头是可信的真实请求地址,无需额外校验。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

