IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    ysicing (i@ysicing.me)发表于 2024-02-24 14:32:42
    love 0

    主要记录一下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-IP 或 True-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

    其他测试



沪ICP备19023445号-2号
友情链接