yo @Falco,nginx 日志中是否能获取到 cf 提供的 real_ip(CF-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主文件中的环境变量或其他地方获取你的cloudflaredIP。 修复已确认不需要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。