在家庭互联网环境下通过Cloudflare Tunnel安装Discourse

yo @Falco,nginx 日志中是否能获取到 cf 提供的 real_ipCF-Connecting-IP header)?我这里不行,只能看到 cloudflared 的 IP。

我认为需要完成以下一项或两项(调查后跟进):

  • 在 nginx 中为 cloudflared 的 IP 添加 set_real_ip_from 配置行。如果这是问题所在,那么我猜 templates/cloudflare.template.yml 中提供的其他 set_real_ip_from 行对于 argotunnel 用户来说是不需要的。这种情况下,也许应该在 docker 仓库中添加一个单独的 argotunnel 模板,从你的 app.yml 主文件中的环境变量或其他地方获取你的 cloudflared IP。
  • 修复 log_format。不过我认为这可能不是问题。 已确认不需要

编辑:
这是我让它生效的方法:

不要使用 cloudflare 模板。没有意义。
而是将以下内容合并到你的 app.yml 中:

hooks:
  after_web_config:
    - file:
        path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
        contents: |
          # 恢复原始访客 IP (ngx_http_realip_module)
          set_real_ip_from 10.100.20.200/32; # 你的 cloudflared/argotunnel IP 范围
          real_ip_header CF-Connecting-IP;

顺便说一句,这会自动添加到 nginx 的 http 上下文中,这是合适的。

PS:我认为,为了整洁起见,cloudflare 模板也应该将其 nginx 配置生成到单独的文件中,而不是使用 sed -i 将其添加到 /etc/nginx/conf.d/discourse.conf

1 个赞