大家好,
我刚刚通过一种漫长而艰难的方式发现了 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
你觉得怎么样?