使用 Caddy 和 CF 时获取访客真实 IP
本文最后更新于 301 天前, 如有失效请评论区留言.
主要记录一下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())
}