如何使用 CloudFlare 揭示真实 IP

我使用 Cloudflare 托管我的论坛,原因有很多,但我希望获取访客的真实 IP 地址,以便准确统计使用该 IP 注册的用户数量,并确保 IP 封禁等功能正常工作。
有什么方法可以实现吗?

您需要在 app.yml 文件的模板部分添加 cloudflare.template.yml

5 个赞

实际上,现在当我尝试访问我的网站时,Web 服务器已经宕机了?

1 个赞

错误是什么?日志文件的内容是什么?

如果我访问论坛,它只会显示错误 521:Web 服务器已关闭。
这是当前日志文件中的内容:

2021-08-11 12:14:46.898 UTC [556] LOG:  正在启动 PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1),运行环境为 x86_64-pc-linux-gnu,由 gcc (Debian 8.3.0-6) 8.3.0 编译,64 位
2021-08-11 12:14:46.899 UTC [556] LOG:  正在监听 IPv4 地址 "0.0.0.0",端口 5432
2021-08-11 12:14:46.899 UTC [556] LOG:  正在监听 IPv6 地址 "::",端口 5432
2021-08-11 12:14:46.996 UTC [556] LOG:  正在监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-08-11 12:14:47.112 UTC [577] LOG:  数据库系统中断;上次已知运行时间为 2021-08-10 14:46:03 UTC
2021-08-11 12:14:47.852 UTC [577] LOG:  数据库系统未正常关闭;正在进行自动恢复
2021-08-11 12:14:47.902 UTC [577] LOG:  重做从 0/3DFE308 开始
2021-08-11 12:14:47.905 UTC [577] LOG:  0/3E0A2D8 处的记录长度无效:期望 24,实际为 0
2021-08-11 12:14:47.905 UTC [577] LOG:  重做在 0/3E0A2B0 处完成
2021-08-11 12:14:48.332 UTC [556] LOG:  数据库系统已准备好接受连接
2021-08-11 15:09:07.632 UTC [556] LOG:  收到智能关闭请求
2021-08-11 15:09:08.970 UTC [556] LOG:  后台进程 "logical replication launcher"(PID 585)以退出代码 1 退出
2021-08-11 15:09:08.973 UTC [580] LOG:  正在关闭
2021-08-11 15:09:09.018 UTC [556] LOG:  数据库系统已关闭
2021-08-11 15:14:54.109 UTC [564] LOG:  正在启动 PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1),运行环境为 x86_64-pc-linux-gnu,由 gcc (Debian 8.3.0-6) 8.3.0 编译,64 位
2021-08-11 15:14:54.110 UTC [564] LOG:  正在监听 IPv4 地址 "0.0.0.0",端口 5432
2021-08-11 15:14:54.110 UTC [564] LOG:  正在监听 IPv6 地址 "::",端口 5432
2021-08-11 15:14:54.132 UTC [564] LOG:  正在监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-08-11 15:14:54.136 UTC [576] LOG:  数据库系统在 2021-08-11 15:14:20 UTC 已关闭
2021-08-11 15:14:54.147 UTC [564] LOG:  数据库系统已准备好接受连接
2021-08-11 15:48:11.435 UTC [564] LOG:  收到智能关闭请求
2021-08-11 15:48:12.349 UTC [564] LOG:  后台进程 "logical replication launcher"(PID 582)以退出代码 1 退出
2021-08-11 15:48:12.349 UTC [577] LOG:  正在关闭
2021-08-11 15:48:12.397 UTC [564] LOG:  数据库系统已关闭
2021-08-11 15:48:17.233 UTC [555] LOG:  正在启动 PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1),运行环境为 x86_64-pc-linux-gnu,由 gcc (Debian 8.3.0-6) 8.3.0 编译,64 位
2021-08-11 15:48:17.233 UTC [555] LOG:  正在监听 IPv4 地址 "0.0.0.0",端口 5432
2021-08-11 15:48:17.233 UTC [555] LOG:  正在监听 IPv6 地址 "::",端口 5432
2021-08-11 15:48:17.245 UTC [555] LOG:  正在监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-08-11 15:48:17.255 UTC [570] LOG:  数据库系统在 2021-08-11 15:48:12 UTC 已关闭
2021-08-11 15:48:17.271 UTC [555] LOG:  数据库系统已准备好接受连接
2021-08-11 18:24:06.544 UTC [555] LOG:  收到智能关闭请求
2021-08-11 18:24:11.892 UTC [555] LOG:  后台进程 "logical replication launcher"(PID 576)以退出代码 1 退出
2021-08-11 18:24:11.895 UTC [571] LOG:  正在关闭
2021-08-11 18:24:11.936 UTC [555] LOG:  数据库系统已关闭
2021-08-11 18:59:31.940 UTC [554] LOG:  正在启动 PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1),运行环境为 x86_64-pc-linux-gnu,由 gcc (Debian 8.3.0-6) 8.3.0 编译,64 位
2021-08-11 18:59:31.940 UTC [554] LOG:  正在监听 IPv4 地址 "0.0.0.0",端口 5432
2021-08-11 18:59:31.940 UTC [554] LOG:  正在监听 IPv6 地址 "::",端口 5432
2021-08-11 18:59:31.964 UTC [554] LOG:  正在监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-08-11 18:59:31.977 UTC [570] LOG:  数据库系统在 2021-08-11 18:24:11 UTC 已关闭
2021-08-11 18:59:32.004 UTC [554] LOG:  数据库系统已准备好接受连接
2 个赞

那是数据库日志。你能检查一下 /var/discourse/shared/standalone/log/var-log/nginx/error.log 下的日志吗?

1 个赞

error.zip (123.2 KB)
错误日志文件位于此 zip 压缩包中,内容基本相同。(我无法直接发布 .log 文件,因为系统不支持该格式,而且 error.log 文件中的内容非常庞大。)

看起来 Cloudflare 模板目前出错了。上次更新是在 2016 年。请将其移除并重新构建。如果时间允许,我会着手修复它。

4 个赞

好的,谢谢您的帮助!

我遇到了同样的问题,很高兴这里已经有解决方案了 :slight_smile:

奇怪的是,这似乎只影响今天执行的重建操作。其他服务器(相同的 Discourse 版本 - Stable 2.7.7)运行正常。

不过,最近有几个论坛(并非在更新后)出现了一些奇怪的错误:

哎呀

驱动本讨论论坛的软件遇到了意外问题。对此造成的不便,我们深表歉意。

有关该错误的详细信息已被记录,并生成了自动通知。我们将对此进行检查。

无需进一步操作。但如果错误持续存在,您可以通过在站点的反馈类别中发布讨论主题,提供额外细节,包括复现错误的步骤。

不确定是否与此相关,正是这个错误促使我最近对同一版本执行了重建操作。

编辑:已确认,移除 Cloudflare 模板后,521 错误已解决。

更新:看起来 @Zenexer 为此提交了 PR:Cloudflare template broken again

2 个赞

如果我在 app.yml 中注释掉 Cloudflare 模板那一行,会对我的 site 产生什么影响?我们的网站正在使用 Cloudflare。

另外,我的问题和这个一样吗?https://meta.discourse.org/t/discourse-updated-from-admin-not-working-after-rebuild-fatal-error-site-does-not-load-anymore-after-rebuild/200443

@markersocial 我的网站运行在 Cloudflare 上,如果我移除那一行,我的网站会发生什么?

据我所知,用户的注册信息和最近使用的 IP 地址将被记录为 Cloudflare 的 IP,而不是他们的真实 IP。因此,如果你封禁某人,Cloudflare 的 IP 会被加入你的封禁日志,这显然不太好。

我认为这意味着,如果用户碰巧获得了某个被封禁的 Cloudflare IP(在模板未使用时),他们将无法登录或注册。不过,我认为已经登录的用户不会受到影响。过去(可能现在依然如此,我不太确定),这甚至可能导致管理员和版主无法登录新会话。

在模板可用之前,暂时禁用公开注册并停止使用 IP 封禁,或许是个明智之举。

1 个赞

好的,谢谢。您真的认为我的问题与这个 Cloudflare 模板漏洞相同吗?请查看我上一帖中的主题链接并予以确认。

我应该使用哪个日志命令来诊断相同的漏洞?

您又是如何确认您的 502 错误也是由相同的 Cloudflare 错误引起的呢?

该问题已通过 Cloudflare template broken again - #3 by Zenexer 修复。请再次尝试使用它。

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.