Twikoo 在多吉云CDN场景下获取访客真实IP的解决方案

这是去年遇到的问题了,虽然当时很快解决了,但一直没时间水一篇文章,就这么拖到了现在。今天终于抽空,把这个小坑记录一下。

遇到的问题

部署 Twikoo 评论系统后,加了 CDN(多吉云),想着加速一下访问速度,结果评论里的用户 IP 地址不对了,显示的是 CDN 节点的 IP。
排查后发现,问题出在CDN 转发时,后端拿到的是节点 IP,而不是访客真实 IP

解决方法

当时我在Github上提了一个 issue ,很快得到了作者 imaegoo 大佬的回复指导,解决过程也很简单,总结下来:

🔹 CDN 通常会把访客真实 IP 加到一个请求头里,比如 X-Forwarded-For

🔹 只需要告诉 Twikoo 从正确的请求头里取 IP 就行了。

比如:

  • 腾讯云 EdgeOne 的访客 IP 放在 EO-Client-IP,配置:

    1
    TWIKOO_IP_HEADERS=["headers.eo-client-ip"]
  • 而我用的是 多吉云,默认是 X-Forwarded-For,所以配置成:

    1
    TWIKOO_IP_HEADERS=["headers.x-forwarded-for"]

⚠️ 注意:格式是 "headers.x-forwarded-for",不是 "X-Forwarded-For"

添加环境变量

如果你的 Twikoo 是通过 1Panel 部署的,可以按下面步骤添加环境变量,其他的大概也类似:

  1. 打开 1Panel 面板,进入 容器

  2. 找到你的 twikoo 容器,点击编辑

  3. 滑到页面最下方,找到 环境变量 部分。

  4. 添加一条新的环境变量:

    1
    TWIKOO_IP_HEADERS=["headers.x-forwarded-for"]
  • 键(Key)TWIKOO_IP_HEADERS

  • 值(Value)["headers.x-forwarded-for"]

  1. 保存并重启容器,配置就生效了!

总结

  • 配了 CDN 后,不用担心评论 IP 问题,只要设置好 IP 透传头就行了。
  • 不同的 CDN 提供的请求头可能不同,记得对照文档确认一下。
  • 小坑一枚,迟来的水文一篇,希望能帮到有缘人!