使用 Caddy 和 CF 时获取访客真实 IP

本文最后更新于 333 天前, 如有失效请评论区留言.

主要记录一下 ysicing.me 如何用户的真实 IP

前情

可能大家发现境外站用户的评论还是控制台提示信息显示的地理位置都是 CFIP 的归属地

如果是其他 web 服务器,都可以参考 Cloudflare 官方文档 Restoring original visitor IPs, 可惜我是使用 Caddy

另外,X-Forwarded-For 标头用于记录代理服务器和访问者的原始 IP,CF 会将代理 IP 添加到 X-Forwarded-For 标头中, 但是 X-Forwarded-For 采用的是附加策略, 可能会导致你获取的 IP 不准确,因为这个可以伪造。由于这个原因,Cloudflare 建议我们使用 CF-Connecting-IPTrue-Client-IP 这两个标头,作为原始访问者的 IP, 这里我以前者 CF-Connecting-IP 为例

Caddy 配置

在 Caddy 中,如果后端服务或程序支持设置从 Cf-Connecting-IP 获取真实 IP,那么就只需要在 Caddyfile 的 reverse_proxy 中 添加该标头

reverse_proxy 100.90.80.3:6666 {
    header_up CF-Connecting-IP {http.request.header.CF-Connecting-IP}
}

上面那个是简单使用,如果更加完善的话,可以考虑配置 trusted_proxies

具体可以看看 reverse_proxy#trusted_proxies 或者 # Global#trusted-proxies

博客设置

博客的 IP 获取方式需要简单调整一下

func GetIP(c *fiber.Ctx) string {
	return c.Get("CF-Connecting-IP", c.IP())
}

验证

大陆 Ping

境外 Ping

其他测试

Sponsor

Like this article? $1 reward

Comments