Cloudflare 模板获取用户真实 IP 的建议

大家好,

我刚刚通过一种漫长而艰难的方式发现了 Cloudflare 在 nginx 中的 real_ip_header CF-Connecting-IP; 设置……

我有一个相当复杂的设置,其中 nginx proxy manager 位于自己的 docker 镜像中(我正在使用 linuxserver.io 的 SWAG,它非常棒),所以连接路径如下:
用户 -> Cloudflare -> 服务器(第一个 docker 容器:Nginx -> 第二个 docker 容器:Discourse)

我将两个 docker 容器都放在同一个 docker 网络中,所以它们可以通信;这没问题。
我遇到了一个真正的问题,试图在 Discourse 日志中获取用户的原始 IP。我阅读了这里所有有用的帖子,并将 cloudflare 模板添加到我的 app.yml 文件中,但它仍然不起作用……

在抓狂之后,我意识到问题不是 Cloudflare 模板本身,而是 Discourse 容器从 NGINX 容器获取 IP 地址的事实,我必须将 docker 网络 IP CIDR 添加到 set_real_ip_from,如下所示:
set_real_ip_from 172.18.0.0/16;

为了帮助未来的托管者,是否可以将这一行添加到 cloudflare 模板中?IP 范围 172.18.0.0/16 本来就是私有的,所以即使您没有在 docker 容器中使用 NPM,添加此范围也不会有坏处。

我的建议是将 cloudflare.template.yml 中的这一行:
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
更改为这一行:
sed -i \"/sendfile on;/a set_real_ip_from 172.18.0.0/16;\\n$CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf

你觉得怎么样?

有许多关于使用反向代理的主题,其中包含如何操作。并非所有使用 Cloudflare 的用户都使用反向代理。

不过,提供一个反向代理模板会很有用,因为我每次在没有脚本的情况下进行设置时都必须查找它。

没错。反之亦然:并非所有使用反向代理的用户都使用 Cloudflare :wink:

这个建议确实是为了让使用 Cloudflare 的用户生活更轻松。对于那些不在 Docker 中使用反向代理的用户来说,这不会有任何改变,但对于那些为简单问题寻找答案而花费数小时的人来说,这有可能节省大量时间。

1 个赞

使用 Cloudflare 的人可能生活很艰难。你可以在这里搜索,找到很多例子。安装模板只是你可能遇到的问题中的一小部分,也是最容易解决的。(我建议你使用像 bunny.net 这样的真实 CDN,它价格便宜——但不是免费的——并且易于配置,但这并不是你问的。)

当然,你的问题与 Cloudflare 无关,而是与反向代理有关,所以搜索 Cloudflare 可能没有帮助!

不过,添加一些更多的标准模板,比如反向代理(以及我真正想要的——一个预编译资产并将其推送到 S3 的模板)是一个好主意。

祝你好运。

1 个赞