搭配Cloudflare与Google Cloud Backend Bucket时,如何从Stackdriver日志中获取原始访客IP
获取Cloudflare+GCP Backend Bucket架构下的原始访客IP
这个问题在反向代理+云存储/负载均衡的架构里太常见了——Cloudflare作为前端代理,会把自己的IP作为RemoteIp传给GCP,导致Stackdriver里看不到真实访客IP。不过解决起来很直接,核心就是利用Cloudflare传递的原始IP请求头,再让GCP把这个头记录到日志里。
关键原理:Cloudflare的原始IP请求头
Cloudflare默认会在转发给后端的请求里添加CF-Connecting-IP头,这个头里就直接存着原始访客的真实IP。相比X-Forwarded-For(可能包含多跳代理IP),CF-Connecting-IP更可靠,因为它只保留最开始的访客IP。
具体配置步骤
因为你的Backend Bucket是挂载在HTTP(S) Load Balancer后面的,所以需要在负载均衡器的日志配置里添加自定义字段,把这个头抓进Stackdriver日志:
进入GCP控制台的负载均衡器页面
找到绑定了你的Backend Bucket的HTTP(S) Load Balancer,进入编辑模式。修改日志配置
在负载均衡器的“Logging configuration”部分,找到“Custom fields”选项:- 点击“Add field”,输入字段名(比如
original_client_ip,方便识别) - 字段来源选择“Request header”
- 输入对应的头名称:
CF-Connecting-IP
- 点击“Add field”,输入字段名(比如
保存并等待生效
保存配置后,GCP需要几分钟时间更新日志采集规则。之后新生成的Stackdriver日志条目里,就会多一个original_client_ip字段,里面就是访客的真实IP了。
额外验证提示
- 可以先在Cloudflare的“Network”设置里确认,没有通过Page Rules或Transform Rules移除
CF-Connecting-IP头(默认是保留的) - 如果你的架构里还有其他代理层,也可以检查
X-Forwarded-For头,但优先推荐CF-Connecting-IP
内容的提问来源于stack exchange,提问作者Kassem Shehady
相关产品推荐
相关产品推荐

